]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/fusion/test/sequence/adt_attribute_proxy.cpp
1 /*=============================================================================
2 Copyright (c) 2010 Christopher Schmidt
4 Distributed under the Boost Software License, Version 1.0. (See accompanying
5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 ==============================================================================*/
8 #include <boost/core/lightweight_test.hpp>
9 #include <boost/fusion/adapted/adt/adapt_assoc_adt.hpp>
10 #include <boost/fusion/sequence.hpp>
11 #include <boost/mpl/assert.hpp>
12 #include <boost/type_traits/is_same.hpp>
16 namespace fusion
=boost::fusion
;
18 template<typename Name
, typename Age
>
26 template<typename OtherName
>
28 set_name(OtherName
const& n
)
33 template<typename OtherAge
>
35 set_age(OtherAge
const& a
)
45 Name
const& get_name()const
55 Age
const& get_age()const
67 BOOST_FUSION_ADAPT_ASSOC_TPL_ADT(
69 (employee
) (Name
)(Age
),
70 (Name
&, Name
const&, obj
.get_name(), obj
.template set_name
<Val
>(val
), keys::name
)
71 (Age
&, Age
const&, obj
.get_age(), obj
.template set_age
<Val
>(val
), keys::age
))
75 typedef employee
<std::string
, int> et
;
80 fusion::at_key
<keys::name
>(e
)="marshall mathers";
81 fusion::at_key
<keys::age
>(e
)=37;
85 boost::fusion::result_of::value_at_key
<et
, keys::name
>::type
,
90 boost::fusion::result_of::value_at_key
<et
, keys::name
>::type
,
91 boost::fusion::result_of::value_at_c
<et
, 0>::type
95 boost::fusion::result_of::value_at_key
<et
, keys::age
>::type
,
100 boost::fusion::result_of::value_at_key
<et
, keys::age
>::type
,
101 boost::fusion::result_of::value_at_c
<et
, 1>::type
106 boost::fusion::result_of::at_key
<et
, keys::name
>::type
,
107 fusion::extension::adt_attribute_proxy
<et
, 0, false>
111 boost::fusion::result_of::at_key
<et
, keys::age
>::type
,
112 fusion::extension::adt_attribute_proxy
<et
, 1, false>
116 boost::fusion::result_of::at_key
<et
, keys::name
>::type
,
117 boost::fusion::result_of::front
<et
>::type
121 boost::fusion::result_of::at_key
<et
, keys::age
>::type
,
122 boost::fusion::result_of::back
<et
>::type
127 boost::fusion::result_of::at_key
<etc
, keys::name
>::type
,
128 fusion::extension::adt_attribute_proxy
<et
, 0, true>
132 boost::fusion::result_of::at_key
<etc
, keys::age
>::type
,
133 fusion::extension::adt_attribute_proxy
<et
, 1, true>
137 boost::fusion::result_of::at_key
<etc
, keys::name
>::type
,
138 boost::fusion::result_of::front
<etc
>::type
142 boost::fusion::result_of::at_key
<etc
, keys::age
>::type
,
143 boost::fusion::result_of::back
<etc
>::type
148 fusion::extension::adt_attribute_proxy
<et
, 0, false>::type
,
153 fusion::extension::adt_attribute_proxy
<et
, 0, true>::type
,
158 fusion::extension::adt_attribute_proxy
<et
, 1, false>::type
,
163 fusion::extension::adt_attribute_proxy
<et
, 1, true>::type
,
168 std::string
& name
=fusion::at_key
<keys::name
>(e
);
169 int& age
=fusion::at_key
<keys::age
>(e
);
170 BOOST_TEST(name
=="marshall mathers");
172 BOOST_TEST(fusion::at_key
<keys::name
>(e
).get()=="marshall mathers");
173 BOOST_TEST(fusion::at_key
<keys::age
>(e
).get()==37);
174 BOOST_TEST(fusion::front(e
).get()=="marshall mathers");
175 BOOST_TEST(fusion::back(e
).get()==37);
179 std::string
const& name
=fusion::at_key
<keys::name
>(ec
);
180 int const& age
=fusion::at_key
<keys::age
>(ec
);
181 BOOST_TEST(name
=="marshall mathers");
183 BOOST_TEST(fusion::at_key
<keys::name
>(ec
).get()=="marshall mathers");
184 BOOST_TEST(fusion::at_key
<keys::age
>(ec
).get()==37);
185 BOOST_TEST(fusion::front(ec
).get()=="marshall mathers");
186 BOOST_TEST(fusion::back(ec
).get()==37);
188 return boost::report_errors();