Ticket #10789: example-join.cpp

File example-join.cpp, 2.9 KB (added by Matei David <matei@…>, 8 years ago)
Line 
1#include <iostream>
2#include <vector>
3#include <string>
4#include <boost/range/join.hpp>
5
6struct A
7{
8 A(int val = 99) : _val(val) {}
9 int _val;
10 friend std::ostream& operator << (std::ostream& os, const A& a) { os << a._val; return os; }
11};
12
13typedef std::vector< A > vect_t;
14
15template < typename Range >
16void print_range_clvalref(const Range& r, const std::string& tag)
17{
18 std::cout << "[c&] " << tag << ":";
19 for (auto e : r)
20 {
21 std::cout << " " << e;
22 }
23 std::cout << std::endl;
24}
25template < typename Range >
26void print_range_lvalref(Range& r, const std::string& tag)
27{
28 std::cout << "[&] " << tag << ":";
29 for (auto e : r)
30 {
31 std::cout << " " << e;
32 }
33 std::cout << std::endl;
34}
35template < typename Range >
36void print_range_crvalref(const Range&& r, const std::string& tag)
37{
38 std::cout << "[c&&] " << tag << ":";
39 for (auto e : r)
40 {
41 std::cout << " " << e;
42 }
43 std::cout << std::endl;
44}
45template < typename Range >
46void print_range_rvalref(Range&& r, const std::string& tag)
47{
48 std::cout << "[&&] " << tag << ":";
49 for (auto e : r)
50 {
51 std::cout << " " << e;
52 }
53 std::cout << std::endl;
54}
55
56
57int main()
58{
59 vect_t v0(1, 12);
60 vect_t v1(1, 34);
61 std::cout << "join(v0, v1):";
62 for (auto a : boost::join(v0, v1))
63 {
64 std::cout << " " << a;
65 }
66 std::cout << std::endl;
67 std::cout << "join(v0, vect_t(1, 34)):";
68 for (auto a : boost::join(v0, vect_t(1, 34)))
69 {
70 std::cout << " " << a;
71 }
72 std::cout << std::endl;
73 print_range_clvalref(boost::join(v0, v1), std::string("boost::join(v0, v1)"));
74 print_range_clvalref(boost::join(v0, vect_t(1, 34)), std::string("boost::join(v0, vect_t(1, 34))"));
75 //print_range_lvalref(boost::join(v0, v1), std::string("boost::join(v0, v1)"));
76 //print_range_lvalref(boost::join(v0, vect_t(1, 34)), std::string("boost::join(v0, vect_t(1, 34))"));
77 print_range_crvalref(boost::join(v0, v1), std::string("boost::join(v0, v1)"));
78 print_range_crvalref(boost::join(v0, vect_t(1, 34)), std::string("boost::join(v0, vect_t(1, 34))"));
79 print_range_rvalref(boost::join(v0, v1), std::string("boost::join(v0, v1)"));
80 print_range_rvalref(boost::join(v0, vect_t(1, 34)), std::string("boost::join(v0, vect_t(1, 34))"));
81 auto rg0 = boost::join(v0, v1);
82 auto rg1 = boost::join(v0, vect_t(1, 34));
83 print_range_clvalref(rg0, "rg0");
84 print_range_clvalref(rg1, "rg1");
85 print_range_lvalref(rg0, "rg0");
86 print_range_lvalref(rg1, "rg1");
87 //print_range_crvalref(rg0, "rg0");
88 //print_range_crvalref(rg1, "rg1");
89 print_range_rvalref(rg0, "rg0");
90 print_range_rvalref(rg1, "rg1");
91 print_range_crvalref(std::move(rg0), "std::move(rg0)");
92 print_range_crvalref(std::move(rg1), "std::move(rg1)");
93 print_range_rvalref(std::move(rg0), "std::move(rg0)");
94 print_range_rvalref(std::move(rg1), "std::move(rg1)");
95}