diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2013-06-25 22:59:01 +0000 |
---|---|---|
committer | <> | 2013-09-27 11:49:28 +0000 |
commit | 8c4528713d907ee2cfd3bfcbbad272c749867f84 (patch) | |
tree | c09e2ce80f47b90c85cc720f5139089ad9c8cfff /libs/fusion/test/algorithm/segmented_find_if.cpp | |
download | boost-tarball-baserock/morph.tar.gz |
Imported from /home/lorry/working-area/delta_boost-tarball/boost_1_54_0.tar.bz2.boost_1_54_0baserock/morph
Diffstat (limited to 'libs/fusion/test/algorithm/segmented_find_if.cpp')
-rw-r--r-- | libs/fusion/test/algorithm/segmented_find_if.cpp | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/libs/fusion/test/algorithm/segmented_find_if.cpp b/libs/fusion/test/algorithm/segmented_find_if.cpp new file mode 100644 index 000000000..98d963cff --- /dev/null +++ b/libs/fusion/test/algorithm/segmented_find_if.cpp @@ -0,0 +1,65 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2011 Eric Niebler + + 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/detail/lightweight_test.hpp> +#include <boost/fusion/container/vector/vector.hpp> +#include <boost/fusion/algorithm/query/find_if.hpp> +#include <boost/fusion/container/generation/make_vector.hpp> +#include <boost/mpl/placeholders.hpp> +#include <boost/type_traits/is_same.hpp> +#include "../sequence/tree.hpp" + +struct not_there {}; + +template<typename Tree> +void +process_tree(Tree const &tree) +{ + using namespace boost; + using mpl::_; + + typedef typename boost::fusion::result_of::find_if<Tree const, is_same<_,short> >::type short_iter; + typedef typename boost::fusion::result_of::find_if<Tree const, is_same<_,float> >::type float_iter; + typedef typename boost::fusion::result_of::find_if<Tree const, is_same<_,not_there> >::type not_there_iter; + + // find_if of a segmented data structure returns generic + // segmented iterators + short_iter si = fusion::find_if<is_same<_,short> >(tree); + float_iter fi = fusion::find_if<is_same<_,float> >(tree); + + // they behave like ordinary Fusion iterators ... + BOOST_TEST((*si == short('d'))); + BOOST_TEST((*fi == float(1))); + + // Searching for something that's not there should return the end iterator. + not_there_iter nti = fusion::find_if<is_same<_,not_there> >(tree); + BOOST_TEST((nti == fusion::end(tree))); +} + +int +main() +{ + using namespace boost::fusion; + process_tree( + make_tree( + make_vector(double(0),'B') + , make_tree( + make_vector(1,2,long(3)) + , make_tree(make_vector('a','b','c')) + , make_tree(make_vector(short('d'),'e','f')) + ) + , make_tree( + make_vector(4,5,6) + , make_tree(make_vector(float(1),'h','i')) + , make_tree(make_vector('j','k','l')) + ) + ) + ); + + return boost::report_errors(); +} + |