12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- // Copyright (c) 2010 Olaf Peter
- // Copyright (c) 2001-2010 Hartmut Kaiser
- //
- // Distributed under the Boost Software License, Version 1.0. (See accompanying
- // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- #include <boost/config/warning_disable.hpp>
- #include <boost/spirit/include/karma.hpp>
- #include <boost/detail/lightweight_test.hpp>
- namespace client
- {
- namespace karma = boost::spirit::karma;
- template <typename OutputIterator>
- struct grammar
- : karma::grammar<OutputIterator, boost::optional<double>()>
- {
- grammar()
- : grammar::base_type(start)
- {
- using karma::double_;
- u = double_ << "U";
- start = ( !double_ << "NA" ) | u;
- start.name("start");
- u.name("u");
- }
- karma::rule<OutputIterator, double()> u;
- karma::rule<OutputIterator, boost::optional<double>()> start;
- };
- }
- int main()
- {
- namespace karma = boost::spirit::karma;
- typedef std::back_insert_iterator<std::string> sink_type;
- boost::optional<double> d1, d2;
- d2 = 1.0;
- std::string generated1, generated2;
- client::grammar<sink_type> g;
- BOOST_TEST(karma::generate(sink_type(generated1), g, d1) && generated1 == "NA");
- BOOST_TEST(karma::generate(sink_type(generated2), g, d2) && generated2 == "1.0U");
- return boost::report_errors();
- }
|