26 #ifndef MLN_ACCU_PAIR_HH
27 # define MLN_ACCU_PAIR_HH
35 # include <mln/core/concept/meta_accumulator.hh>
37 # include <mln/accu/internal/base.hh>
38 # include <mln/metal/is_a.hh>
39 # include <mln/metal/unqualif.hh>
57 template <
typename A1,
typename A2,
typename T = mln_argument(A1)>
58 struct pair :
public mln::accu::internal::base< std::pair<mln_result(A1), mln_result(A2)>,
63 typedef mln_result(A1) result_1;
64 typedef mln_result(A2) result_2;
73 void take_as_init_(
const argument& t);
74 void take(
const argument& t);
80 std::pair<mln_result(A1), mln_result(A2)>
to_result()
const;
81 void get_result(result_1& r1, result_2& r2)
const;
85 mln_result(A1)
first()
const;
87 mln_result(A2)
second()
const;
109 template <
typename A1,
typename A2>
112 template <
typename T>
115 typedef mln_accu_with(A1, T) A1_T;
116 typedef mln_accu_with(A2, T) A2_T;
124 # ifndef MLN_INCLUDE_ONLY
126 template <
typename A1,
typename A2,
typename T>
133 template <
typename A1,
typename A2,
typename T>
142 template <
typename A1,
typename A2,
typename T>
147 a1_.take_as_init_(t);
148 a2_.take_as_init_(t);
151 template <
typename A1,
typename A2,
typename T>
154 pair<A1,A2,T>::take(
const argument& t)
160 template <
typename A1,
typename A2,
typename T>
163 pair<A1,A2,T>::take(
const pair<A1,A2,T>& other)
169 template <
typename A1,
typename A2,
typename T>
171 std::pair<mln_result(A1), mln_result(A2)>
174 std::pair<mln_result(A1), mln_result(A2)> tmp(a1_.to_result(), a2_.to_result());
178 template <
typename A1,
typename A2,
typename T>
185 r2 = a2_.to_result();
188 template <
typename A1,
typename A2,
typename T>
196 template <
typename A1,
typename A2,
typename T>
206 template <
typename A1,
typename A2,
typename T>
214 template <
typename A1,
typename A2,
typename T>
223 template <
typename A1,
typename A2,
typename T>
228 return a1_.is_valid() && a2_.is_valid();
231 # endif // ! MLN_INCLUDE_ONLY
238 #endif // ! MLN_ACCU_PAIR_HH