]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/test/qi/regression_adapt_adt.cpp
1 // Copyright (c) 2011 Roji Philip
2 // Copyright (c) 2001-2011 Hartmut Kaiser
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)
7 #include <boost/spirit/include/support_adapt_adt_attributes.hpp>
9 #include <boost/fusion/include/adapt_adt.hpp>
10 #include <boost/optional.hpp>
12 #include <boost/spirit/include/qi.hpp>
16 ///////////////////////////////////////////////////////////////////////////////
20 boost::optional
<unsigned> opt
;
22 unsigned& getvar() { return var
; }
23 unsigned const& getvar() const { return var
; }
24 void setvar(unsigned val
) { var
= val
; }
26 boost::optional
<unsigned>& getopt() { return opt
; }
27 boost::optional
<unsigned> const& getopt() const { return opt
; }
28 void setopt(boost::optional
<unsigned> const& val
) { opt
= val
; }
31 BOOST_FUSION_ADAPT_ADT(
33 (unsigned&, unsigned const&, obj
.getvar(), obj
.setvar(val
))
34 (boost::optional
<unsigned>&, boost::optional
<unsigned> const&,
35 obj
.getopt(), obj
.setopt(val
))
38 ///////////////////////////////////////////////////////////////////////////////
42 boost::optional
<std::string
> optstr
;
44 std::string
& getstring() { return str
; }
45 std::string
const& getstring() const { return str
; }
46 void setstring(std::string
const& val
) { str
= val
; }
48 boost::optional
<std::string
>& getoptstring() { return optstr
; }
49 boost::optional
<std::string
> const& getoptstring() const { return optstr
; }
50 void setoptstring(boost::optional
<std::string
> const& val
) { optstr
= val
; }
53 BOOST_FUSION_ADAPT_ADT(
55 (std::string
&, std::string
const&, obj
.getstring(), obj
.setstring(val
))
56 (boost::optional
<std::string
>&, boost::optional
<std::string
> const&,
57 obj
.getoptstring(), obj
.setoptstring(val
))
60 ///////////////////////////////////////////////////////////////////////////////
63 using spirit_test::test_attr
;
64 namespace qi
= boost::spirit::qi
;
68 BOOST_TEST(test_attr("123@999", qi::uint_
>> -('@' >> qi::uint_
), data
) &&
69 data
.var
== 123 && data
.opt
&& data
.opt
.get() == 999);
74 BOOST_TEST(test_attr("123", qi::uint_
>> -('@' >> qi::uint_
), data
) &&
75 data
.var
== 123 && !data
.opt
);
80 BOOST_TEST(test_attr("Hello:OptionalHello",
81 +qi::alnum
>> -(':' >> +qi::alnum
), data
) &&
82 data
.str
== "Hello" &&
83 data
.optstr
&& data
.optstr
.get() == "OptionalHello");
88 BOOST_TEST(test_attr("Hello",
89 +qi::alnum
>> -(':' >> +qi::alnum
), data
) &&
90 data
.str
== "Hello" && !data
.optstr
);
94 qi::rule
<char const*, unsigned()> uint_r
= qi::uint_
;
96 BOOST_TEST(test_attr("123@999", uint_r
>> -('@' >> uint_r
), data
) &&
97 data
.var
== 123 && data
.opt
&& data
.opt
.get() == 999);
100 return boost::report_errors();