Ticket #7953: minimum.cpp

File minimum.cpp, 1.3 KB (added by Philipp Schwaha <philipp@…>, 10 years ago)
Line 
1#include <boost/phoenix.hpp>
2#include <boost/fusion/adapted/std_tuple.hpp>
3#include <boost/phoenix/fusion/at.hpp>
4
5#include <iostream>
6#include <valarray>
7#include <tuple>
8
9int main() {
10 using boost::phoenix::arg_names::arg1 ;
11 using boost::phoenix::arg_names::arg2 ;
12 using boost::phoenix::val ;
13 using boost::phoenix::at_c ;
14
15 double mass(1.) ;
16 auto apply(boost::phoenix::at_c<0>(arg1)
17 += boost::phoenix::at_c<1>(arg1) / val(mass) * arg2 ) ;
18 std::valarray<double> item_a = { 1., 1., 1. } ;
19 std::valarray<double> item_b = { 1., 1., 1. } ;
20 auto test(std::make_tuple(item_a, item_b)) ;
21
22 for (size_t i(0); i<std::get<0>(test).size(); ++i)
23 std::cout << std::get<0>(test)[i] << " ";
24 std::cout << std::endl ;
25 for (size_t i(0); i<std::get<1>(test).size(); ++i)
26 std::cout << std::get<0>(test)[i] << " ";
27 std::cout << std::endl ;
28 std::cout << "======================================" << std::endl ;
29 apply (test, 1.) ;
30
31 std::get<0>(test) += std::get<0>(test) / mass * 1. ;
32 for (size_t i(0); i<std::get<0>(test).size(); ++i)
33 std::cout << std::get<0>(test)[i] << " ";
34 std::cout << std::endl ;
35 for (size_t i(0); i<std::get<1>(test).size(); ++i)
36 std::cout << std::get<1>(test)[i] << " ";
37 std::cout << std::endl ;
38}