From 9a1bc7d6774b4e978ca7e31fc32488210fea7552 Mon Sep 17 00:00:00 2001 From: Joel de Guzman Date: Sun, 4 Oct 2009 16:59:50 +0000 Subject: [PATCH] BOOST_FUSION_ADAPT_CLASS [SVN r56576] --- doc/container.qbk | 4 +- test/sequence/adapt_class.cpp | 118 +++++++++++++++++++++++++ test/sequence/test_deduce_sequence.cpp | 16 ++++ 3 files changed, 135 insertions(+), 3 deletions(-) create mode 100644 test/sequence/adapt_class.cpp create mode 100644 test/sequence/test_deduce_sequence.cpp diff --git a/doc/container.qbk b/doc/container.qbk index c859e4ae..226d3da1 100644 --- a/doc/container.qbk +++ b/doc/container.qbk @@ -716,9 +716,7 @@ default. Example: [heading Example] - make_map( - __fusion_make_pair__('X') - , __fusion_make_pair__("Men")) + make_map('X', "Men") [heading See also] diff --git a/test/sequence/adapt_class.cpp b/test/sequence/adapt_class.cpp new file mode 100644 index 00000000..fd9b38c5 --- /dev/null +++ b/test/sequence/adapt_class.cpp @@ -0,0 +1,118 @@ +/*============================================================================= + Copyright (c) 2001-2009 Joel de Guzman + + 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace ns +{ + class point + { + public: + + point() : x(0), y(0) {} + point(int x, int y) : x(x), y(y) {} + + int get_x() const { return x; } + int get_y() const { return y; } + void set_x(int x_) { x = x_; } + void set_y(int y_) { y = y_; } + + private: + + int x; + int y; + }; +} + +BOOST_FUSION_ADAPT_CLASS( + ns::point, + (int, int, obj.get_x(), obj.set_x(val)) + (int, int, obj.get_y(), obj.set_y(val)) +) + +int +main() +{ + using namespace boost::fusion; + using namespace boost; + using namespace std; + + std::cout << tuple_open('['); + std::cout << tuple_close(']'); + std::cout << tuple_delimiter(", "); + + { + BOOST_MPL_ASSERT_NOT((traits::is_view)); + ns::point p(123, 456); + + std::cout << at_c<0>(p) << std::endl; + std::cout << at_c<1>(p) << std::endl; + std::cout << p << std::endl; + BOOST_TEST(p == make_vector(123, 456)); + + at_c<0>(p) = 6; + at_c<1>(p) = 9; + BOOST_TEST(p == make_vector(6, 9)); + + BOOST_STATIC_ASSERT(result_of::size::value == 2); + BOOST_STATIC_ASSERT(!result_of::empty::value); + + BOOST_TEST(front(p) == 6); + BOOST_TEST(back(p) == 9); + } + + { + fusion::vector v1(4, 2); + ns::point v2(5, 3); + fusion::vector v3(5, 4); + BOOST_TEST(v1 < v2); + BOOST_TEST(v1 <= v2); + BOOST_TEST(v2 > v1); + BOOST_TEST(v2 >= v1); + BOOST_TEST(v2 < v3); + BOOST_TEST(v2 <= v3); + BOOST_TEST(v3 > v2); + BOOST_TEST(v3 >= v2); + } + + { + // conversion from ns::point to vector + ns::point p(5, 3); + fusion::vector v(p); + v = p; + } + + { + // conversion from ns::point to list + ns::point p(5, 3); + fusion::list l(p); + l = p; + } + + return boost::report_errors(); +} + diff --git a/test/sequence/test_deduce_sequence.cpp b/test/sequence/test_deduce_sequence.cpp new file mode 100644 index 00000000..d137cd30 --- /dev/null +++ b/test/sequence/test_deduce_sequence.cpp @@ -0,0 +1,16 @@ + +#include +#include + +typedef boost::fusion::traits::deduce_sequence < + +boost::mpl::vector + +>::type seq1_t; + + +typedef boost::fusion::traits::deduce_sequence < + +boost::fusion::vector + +>::type seq2_t;