| 1 | #include <boost/type_traits.hpp>
|
|---|
| 2 | #include <boost/assert.hpp>
|
|---|
| 3 | #include <boost/mpl/vector.hpp>
|
|---|
| 4 | #include <boost/mpl/equal_to.hpp>
|
|---|
| 5 | #include <boost/mpl/assert.hpp>
|
|---|
| 6 | #include <boost/mpl/transform.hpp>
|
|---|
| 7 | #include <boost/shared_features/temp/accu_a.hpp>
|
|---|
| 8 | #include <boost/shared_features/temp/accu_b.hpp>
|
|---|
| 9 | #include <boost/accumulators/statistics/stats.hpp>
|
|---|
| 10 | #include <boost/accumulators/framework/depends_on.hpp>
|
|---|
| 11 | #include <boost/accumulators/framework/accumulator_set.hpp>
|
|---|
| 12 | #include <boost/accumulators/framework/extractor.hpp>
|
|---|
| 13 | #include <iostream>
|
|---|
| 14 | #include <libs/shared_features/src/example/temp_accu.h>
|
|---|
| 15 |
|
|---|
| 16 |
|
|---|
| 17 | void example_temp_accu(){
|
|---|
| 18 |
|
|---|
| 19 | using namespace boost;
|
|---|
| 20 | using namespace boost::accumulators;
|
|---|
| 21 |
|
|---|
| 22 | typedef mpl::size_t<0> id0;
|
|---|
| 23 | typedef mpl::size_t<1> id1;
|
|---|
| 24 |
|
|---|
| 25 | typedef double value_type;
|
|---|
| 26 | typedef tag::accu_a<id0> a_type;
|
|---|
| 27 | typedef tag::accu_b<id1,id0> b_type;
|
|---|
| 28 |
|
|---|
| 29 | typedef accumulator_set<
|
|---|
| 30 | value_type,
|
|---|
| 31 | stats<
|
|---|
| 32 | b_type
|
|---|
| 33 | >
|
|---|
| 34 | > set_type;
|
|---|
| 35 |
|
|---|
| 36 |
|
|---|
| 37 | typedef set_type::accumulators_mpl_vector::type wrapped_features;
|
|---|
| 38 |
|
|---|
| 39 | typedef mpl::transform<
|
|---|
| 40 | wrapped_features,
|
|---|
| 41 | accumulators::detail::feature_tag<mpl::_1>
|
|---|
| 42 | >::type features;
|
|---|
| 43 |
|
|---|
| 44 | BOOST_STATIC_ASSERT((
|
|---|
| 45 | mpl::equal_to<
|
|---|
| 46 | mpl::size_t<2>,
|
|---|
| 47 | mpl::size<features>::type
|
|---|
| 48 | >::value
|
|---|
| 49 | ));
|
|---|
| 50 |
|
|---|
| 51 | typedef mpl::back<features>::type actual_back;
|
|---|
| 52 |
|
|---|
| 53 | BOOST_STATIC_ASSERT((
|
|---|
| 54 | is_same<b_type,actual_back>::value
|
|---|
| 55 | ));
|
|---|
| 56 |
|
|---|
| 57 |
|
|---|
| 58 | set_type set(
|
|---|
| 59 | (
|
|---|
| 60 | kwd<id0>::value = 0.9
|
|---|
| 61 | )
|
|---|
| 62 | ); //supposed to set b.x_ = a.x_;
|
|---|
| 63 |
|
|---|
| 64 |
|
|---|
| 65 | std::cout << "a.x_=" << extract_result<a_type>(set) << std::endl;
|
|---|
| 66 | std::cout << "b.x_=" << extract_result<b_type>(set) << std::endl;
|
|---|
| 67 | set(0); // sets b.x_ = a.x_ again
|
|---|
| 68 | std::cout << "b.x_=" << extract_result<b_type>(set) << std::endl;
|
|---|
| 69 |
|
|---|
| 70 | //Output:
|
|---|
| 71 | //a.x_=0.9
|
|---|
| 72 | //b.x_=0.1 // expects 0.9
|
|---|
| 73 | //b.x_=0.9
|
|---|
| 74 |
|
|---|
| 75 |
|
|---|
| 76 | }
|
|---|