forked from boostorg/fusion
Compare commits
28 Commits
mutable_fu
...
boost-1.68
Author | SHA1 | Date | |
---|---|---|---|
c740a4dbad | |||
bd96a6bcfb | |||
2a95fcc3e9 | |||
06a2f0560f | |||
c76cd3d6b2 | |||
77959b1d33 | |||
c6448b9e45 | |||
561890429b | |||
23c54602c2 | |||
30c044b03a | |||
a71b9607e1 | |||
102588ae46 | |||
0c138de7cb | |||
7899658d8e | |||
03ac9086bc | |||
479bc3133b | |||
71ad390cf0 | |||
e6b5879511 | |||
84d8afbb31 | |||
715a7fb729 | |||
3b96c3b70b | |||
904d3c2c01 | |||
0263c75cd8 | |||
53ba3de15a | |||
d6c853f7ad | |||
dc55e5e103 | |||
1646a7252b | |||
dae9964b15 |
@ -23,19 +23,6 @@ various data structures, non-intrusively, as full fledged Fusion sequences.
|
||||
#include <boost/fusion/adapted.hpp>
|
||||
#include <boost/fusion/include/adapted.hpp>
|
||||
|
||||
Fusion sequences may also be adapted as fully conforming __mpl__ sequences (see
|
||||
__intrinsics__). That way, we can have 2-way adaptation to and from __mpl__ and
|
||||
Fusion. To make Fusion sequences fully conforming __mpl__ sequences, include:
|
||||
|
||||
#include <boost/fusion/mpl.hpp>
|
||||
|
||||
If you want bi-directional adaptation to and from __mpl__ and Fusion, simply
|
||||
include:
|
||||
|
||||
#include <boost/fusion/include/mpl.hpp>
|
||||
|
||||
The header includes all the necessary headers.
|
||||
|
||||
[section:array Array]
|
||||
|
||||
This module provides adapters for arrays. Including the module
|
||||
@ -145,6 +132,21 @@ header makes all __mpl__ sequences fully conforming fusion sequences.
|
||||
std::cout << __at_c__<0>(v) << std::endl;
|
||||
std::cout << __at_c__<1>(v) << std::endl;
|
||||
|
||||
[heading Bi-directional adaptation]
|
||||
|
||||
Fusion sequences may also be adapted as fully conforming __mpl__ sequences (see
|
||||
__intrinsics__). That way, we can have 2-way adaptation to and from __mpl__ and
|
||||
Fusion. To make Fusion sequences fully conforming __mpl__ sequences, include:
|
||||
|
||||
#include <boost/fusion/mpl.hpp>
|
||||
|
||||
If you want bi-directional adaptation to and from __mpl__ and Fusion, simply
|
||||
include:
|
||||
|
||||
#include <boost/fusion/include/mpl.hpp>
|
||||
|
||||
The header includes all the necessary headers.
|
||||
|
||||
[heading See also]
|
||||
|
||||
__mpl__
|
||||
|
@ -1522,6 +1522,16 @@ each element. Analogously, the global `operator>>` has been overloaded
|
||||
to extract __sequence__(s) from generic input streams by recursively
|
||||
calling `operator>>` for each element.
|
||||
|
||||
Please note that, to display your adapted types via fusion IO system,
|
||||
corresponding overloaded operators should be introduced to same namespace
|
||||
of the type.
|
||||
|
||||
namespace your_awesome_library
|
||||
{
|
||||
using boost::fusion::operators::operator>>; // for input
|
||||
using boost::fusion::operators::operator<<; // for output
|
||||
...
|
||||
|
||||
The default delimiter between the elements is space, and the __sequence__
|
||||
is enclosed in parenthesis. For Example:
|
||||
|
||||
|
13
doc/view.qbk
13
doc/view.qbk
@ -93,10 +93,9 @@ presents only those elements for which its predicate evaluates to
|
||||
[heading Template parameters]
|
||||
|
||||
[table
|
||||
[[Parameter] [Description] [Default]]
|
||||
[[`Sequence`] [A __forward_sequence__] []]
|
||||
[[`Pred`] [Unary Metafunction
|
||||
returning an `mpl::bool_`] []]
|
||||
[[Parameter] [Description] [Default]]
|
||||
[[`Sequence`] [A __forward_sequence__] []]
|
||||
[[`Pred`] [A unary __mpl_lambda_expression__] []]
|
||||
]
|
||||
|
||||
[heading Model of]
|
||||
@ -271,7 +270,7 @@ defined in the implemented models.
|
||||
[heading Description]
|
||||
|
||||
`zip_view` presents a view which iterates over a collection of __sequence__(s) in parallel. A `zip_view`
|
||||
is constructed from a __sequence__ of references to the component __sequence__s.
|
||||
is constructed from a __sequence__ of references to the component `__sequence__`s.
|
||||
|
||||
[heading Header]
|
||||
|
||||
@ -287,7 +286,7 @@ is constructed from a __sequence__ of references to the component __sequence__s.
|
||||
|
||||
[table
|
||||
[[Parameter] [Description] [Default]]
|
||||
[[`Sequences`] [A __forward_sequence__ of references to other Fusion __sequence__s] []]
|
||||
[[`Sequences`] [A __forward_sequence__ of references to other Fusion `__sequence__`s] []]
|
||||
]
|
||||
|
||||
[heading Model of]
|
||||
@ -309,7 +308,7 @@ defined in __forward_sequence__.
|
||||
|
||||
[table
|
||||
[[Expression] [Semantics]]
|
||||
[[`ZV(s)`] [Creates a `zip_view` given a sequence of references to the component __sequence__s.]]
|
||||
[[`ZV(s)`] [Creates a `zip_view` given a sequence of references to the component `__sequence__`s.]]
|
||||
[[`ZV(zv1)`] [Copy constructs a `zip_view` from another `zip_view`, `zv`.]]
|
||||
[[`zv1 = zv2`] [Assigns to a `zip_view`, `zv`, from another `zip_view`, `zv2`.]]
|
||||
]
|
||||
|
@ -1,38 +0,0 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2007 Dan Marsden
|
||||
|
||||
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)
|
||||
==============================================================================*/
|
||||
#if !defined(BOOST_FUSION_APPLY_TRANSFORM_RESULT_02092006_1936)
|
||||
#define BOOST_FUSION_APPLY_TRANSFORM_RESULT_02092006_1936
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/utility/result_of.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct void_;
|
||||
|
||||
namespace detail
|
||||
{
|
||||
template <typename F>
|
||||
struct apply_transform_result
|
||||
{
|
||||
template <typename T0, typename T1 = void_>
|
||||
struct apply
|
||||
: boost::result_of<F(T0, T1)>
|
||||
{};
|
||||
|
||||
template <typename T0>
|
||||
struct apply<T0, void_>
|
||||
: boost::result_of<F(T0)>
|
||||
{};
|
||||
};
|
||||
}
|
||||
}}
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2005-2006 Dan Marsden
|
||||
Copyright (c) 2018 Kohei Takahashi
|
||||
|
||||
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)
|
||||
@ -9,9 +10,8 @@
|
||||
#define BOOST_FUSION_AT_IMPL_20061029_1946
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/mpl/apply.hpp>
|
||||
#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/at.hpp>
|
||||
#include <boost/utility/result_of.hpp>
|
||||
|
||||
namespace boost { namespace fusion {
|
||||
struct transform_view_tag;
|
||||
@ -29,9 +29,8 @@ namespace boost { namespace fusion {
|
||||
struct apply
|
||||
{
|
||||
typedef typename Seq::transform_type F;
|
||||
typedef detail::apply_transform_result<F> transform_type;
|
||||
typedef typename boost::fusion::result_of::at<typename Seq::sequence_type, N>::type value_type;
|
||||
typedef typename mpl::apply<transform_type, value_type>::type type;
|
||||
typedef typename result_of::at<typename Seq::sequence_type, N>::type value_type;
|
||||
typedef typename boost::result_of<F(value_type)>::type type;
|
||||
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type call(Seq& seq)
|
||||
@ -48,10 +47,9 @@ namespace boost { namespace fusion {
|
||||
struct apply
|
||||
{
|
||||
typedef typename Seq::transform_type F;
|
||||
typedef detail::apply_transform_result<F> transform_type;
|
||||
typedef typename boost::fusion::result_of::at<typename Seq::sequence1_type, N>::type value1_type;
|
||||
typedef typename boost::fusion::result_of::at<typename Seq::sequence2_type, N>::type value2_type;
|
||||
typedef typename mpl::apply<transform_type, value1_type, value2_type>::type type;
|
||||
typedef typename result_of::at<typename Seq::sequence1_type, N>::type value1_type;
|
||||
typedef typename result_of::at<typename Seq::sequence2_type, N>::type value2_type;
|
||||
typedef typename boost::result_of<F(value1_type, value2_type)>::type type;
|
||||
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type call(Seq& seq)
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2018 Kohei Takahashi
|
||||
|
||||
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)
|
||||
@ -8,10 +9,8 @@
|
||||
#define FUSION_DEREF_IMPL_07162005_1026
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/mpl/apply.hpp>
|
||||
#include <boost/fusion/iterator/deref.hpp>
|
||||
#include <boost/fusion/iterator/value_of.hpp>
|
||||
#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp>
|
||||
#include <boost/utility/result_of.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
@ -34,8 +33,8 @@ namespace boost { namespace fusion
|
||||
result_of::deref<typename Iterator::first_type>::type
|
||||
value_type;
|
||||
|
||||
typedef detail::apply_transform_result<typename Iterator::transform_type> transform_type;
|
||||
typedef typename mpl::apply<transform_type, value_type>::type type;
|
||||
typedef typename Iterator::transform_type F;
|
||||
typedef typename boost::result_of<F(value_type)>::type type;
|
||||
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
@ -60,8 +59,8 @@ namespace boost { namespace fusion
|
||||
result_of::deref<typename Iterator::first2_type>::type
|
||||
value2_type;
|
||||
|
||||
typedef detail::apply_transform_result<typename Iterator::transform_type> transform_type;
|
||||
typedef typename mpl::apply<transform_type, value1_type, value2_type>::type type;
|
||||
typedef typename Iterator::transform_type F;
|
||||
typedef typename boost::result_of<F(value1_type, value2_type)>::type type;
|
||||
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
@ -70,7 +69,7 @@ namespace boost { namespace fusion
|
||||
return i.f(*i.first1, *i.first2);
|
||||
}
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
}}
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2005-2006 Dan Marsden
|
||||
Copyright (c) 2018 Kohei Takahashi
|
||||
|
||||
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)
|
||||
@ -9,9 +10,8 @@
|
||||
#define BOOST_FUSION_VALUE_AT_IMPL_20061101_0745
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/mpl/apply.hpp>
|
||||
#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/value_at.hpp>
|
||||
#include <boost/utility/result_of.hpp>
|
||||
|
||||
namespace boost { namespace fusion {
|
||||
struct transform_view_tag;
|
||||
@ -29,9 +29,8 @@ namespace boost { namespace fusion {
|
||||
struct apply
|
||||
{
|
||||
typedef typename Seq::transform_type F;
|
||||
typedef detail::apply_transform_result<F> transform_type;
|
||||
typedef typename boost::fusion::result_of::value_at<typename Seq::sequence_type, N>::type value_type;
|
||||
typedef typename mpl::apply<transform_type, value_type>::type type;
|
||||
typedef typename result_of::value_at<typename Seq::sequence_type, N>::type value_type;
|
||||
typedef typename boost::result_of<F(value_type)>::type type;
|
||||
};
|
||||
};
|
||||
|
||||
@ -42,10 +41,9 @@ namespace boost { namespace fusion {
|
||||
struct apply
|
||||
{
|
||||
typedef typename Seq::transform_type F;
|
||||
typedef detail::apply_transform_result<F> transform_type;
|
||||
typedef typename boost::fusion::result_of::value_at<typename Seq::sequence1_type, N>::type value1_type;
|
||||
typedef typename boost::fusion::result_of::value_at<typename Seq::sequence2_type, N>::type value2_type;
|
||||
typedef typename mpl::apply<transform_type, value1_type, value2_type>::type type;
|
||||
typedef typename result_of::value_at<typename Seq::sequence1_type, N>::type value1_type;
|
||||
typedef typename result_of::value_at<typename Seq::sequence2_type, N>::type value2_type;
|
||||
typedef typename boost::result_of<F(value1_type, value2_type)>::type type;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2018 Kohei Takahashi
|
||||
|
||||
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)
|
||||
@ -8,9 +9,8 @@
|
||||
#define FUSION_VALUE_OF_IMPL_07162005_1030
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/mpl/apply.hpp>
|
||||
#include <boost/fusion/iterator/value_of.hpp>
|
||||
#include <boost/fusion/view/transform_view/detail/apply_transform_result.hpp>
|
||||
#include <boost/utility/result_of.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
@ -33,8 +33,8 @@ namespace boost { namespace fusion
|
||||
result_of::value_of<typename Iterator::first_type>::type
|
||||
value_type;
|
||||
|
||||
typedef detail::apply_transform_result<typename Iterator::transform_type> transform_type;
|
||||
typedef typename mpl::apply<transform_type, value_type>::type type;
|
||||
typedef typename Iterator::transform_type F;
|
||||
typedef typename boost::result_of<F(value_type)>::type type;
|
||||
};
|
||||
};
|
||||
|
||||
@ -52,8 +52,8 @@ namespace boost { namespace fusion
|
||||
result_of::value_of<typename Iterator::first2_type>::type
|
||||
value2_type;
|
||||
|
||||
typedef detail::apply_transform_result<typename Iterator::transform_type> transform_type;
|
||||
typedef typename mpl::apply<transform_type, value1_type, value2_type>::type type;
|
||||
typedef typename Iterator::transform_type F;
|
||||
typedef typename boost::result_of<F(value1_type, value2_type)>::type type;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
@ -66,6 +66,7 @@ project
|
||||
[ run algorithm/zip2.cpp ]
|
||||
[ run algorithm/zip_ignore.cpp ]
|
||||
[ run algorithm/flatten.cpp ]
|
||||
[ compile algorithm/ticket-5490.cpp ]
|
||||
|
||||
[ run sequence/as_deque.cpp ]
|
||||
[ run sequence/as_list.cpp ]
|
||||
|
@ -1,12 +1,11 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2007 Dan Marsden
|
||||
Copyright (c) 2018 Kohei Takahashi
|
||||
|
||||
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/core/lightweight_test.hpp>
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
#include <boost/fusion/container/vector/vector.hpp>
|
||||
#include <boost/fusion/adapted/mpl.hpp>
|
||||
#include <boost/fusion/algorithm/query/all.hpp>
|
||||
@ -29,19 +28,6 @@ namespace
|
||||
|
||||
int search;
|
||||
};
|
||||
|
||||
struct mutable_search_for : search_for
|
||||
{
|
||||
explicit mutable_search_for(int in_search)
|
||||
: search_for(in_search)
|
||||
{}
|
||||
|
||||
template <typename T>
|
||||
bool operator()(T const& v)
|
||||
{
|
||||
return search_for::operator()(v);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
int
|
||||
@ -72,20 +58,11 @@ main()
|
||||
}
|
||||
|
||||
{
|
||||
boost::fusion::vector<int, short, double> t(1, 2, 3.3);
|
||||
BOOST_TEST(!boost::fusion::all(t, search_for(1)));
|
||||
BOOST_TEST(!boost::fusion::all(t, mutable_search_for(1)));
|
||||
}
|
||||
|
||||
{
|
||||
typedef boost::mpl::vector_c<int, 1, 1, 1> mpl_vec;
|
||||
typedef boost::mpl::vector_c<int, 1> mpl_vec;
|
||||
// We cannot use lambda here as mpl vec iterators return
|
||||
// rvalues, and lambda needs lvalues.
|
||||
BOOST_TEST(boost::fusion::all(mpl_vec(), search_for(1)));
|
||||
BOOST_TEST(!boost::fusion::all(mpl_vec(), search_for(2)));
|
||||
|
||||
BOOST_TEST(boost::fusion::all(mpl_vec(), mutable_search_for(1)));
|
||||
BOOST_TEST(!boost::fusion::all(mpl_vec(), mutable_search_for(2)));
|
||||
}
|
||||
|
||||
return boost::report_errors();
|
||||
|
@ -2,12 +2,11 @@
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2005 Eric Niebler
|
||||
Copyright (c) Dan Marsden
|
||||
Copyright (c) 2018 Kohei Takahashi
|
||||
|
||||
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/core/lightweight_test.hpp>
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
#include <boost/fusion/container/vector/vector.hpp>
|
||||
#include <boost/fusion/adapted/mpl.hpp>
|
||||
#include <boost/fusion/algorithm/query/any.hpp>
|
||||
@ -30,19 +29,6 @@ namespace
|
||||
|
||||
int search;
|
||||
};
|
||||
|
||||
struct mutable_search_for : search_for
|
||||
{
|
||||
explicit mutable_search_for(int in_search)
|
||||
: search_for(in_search)
|
||||
{}
|
||||
|
||||
template <typename T>
|
||||
bool operator()(T const& v)
|
||||
{
|
||||
return search_for::operator()(v);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
int
|
||||
@ -58,21 +44,12 @@ main()
|
||||
BOOST_TEST(!boost::fusion::any(t, boost::lambda::_1 == 3));
|
||||
}
|
||||
|
||||
{
|
||||
boost::fusion::vector<int, short, double> t(1, 2, 3.3);
|
||||
BOOST_TEST(boost::fusion::any(t, search_for(1)));
|
||||
BOOST_TEST(boost::fusion::any(t, mutable_search_for(1)));
|
||||
}
|
||||
|
||||
{
|
||||
typedef boost::mpl::vector_c<int, 1, 2, 3> mpl_vec;
|
||||
// We cannot use lambda here as mpl vec iterators return
|
||||
// rvalues, and lambda needs lvalues.
|
||||
BOOST_TEST(boost::fusion::any(mpl_vec(), search_for(2)));
|
||||
BOOST_TEST(!boost::fusion::any(mpl_vec(), search_for(4)));
|
||||
|
||||
BOOST_TEST(boost::fusion::any(mpl_vec(), mutable_search_for(2)));
|
||||
BOOST_TEST(!boost::fusion::any(mpl_vec(), mutable_search_for(4)));
|
||||
}
|
||||
|
||||
return boost::report_errors();
|
||||
|
@ -1,12 +1,11 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2005 Eric Niebler
|
||||
Copyright (c) 2018 Kohei Takahashi
|
||||
|
||||
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/core/lightweight_test.hpp>
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
#include <boost/fusion/container/vector/vector.hpp>
|
||||
#include <boost/fusion/adapted/mpl.hpp>
|
||||
#include <boost/fusion/algorithm/query/count_if.hpp>
|
||||
@ -19,29 +18,20 @@ struct bind1st<F<T> > : public F<T>
|
||||
{
|
||||
T n;
|
||||
bind1st(T n) : n(n) { }
|
||||
bool operator()(T v) { return F<T>::operator()(n, v); }
|
||||
bool operator()(T v) const { return F<T>::operator()(n, v); }
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct mutable_equal_to : std::equal_to<T>
|
||||
{
|
||||
bool operator()(T l, T r) { return std::equal_to<T>::operator()(l, r); }
|
||||
};
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
{
|
||||
boost::fusion::vector<int, short, double> t(1, 2, 3.3);
|
||||
BOOST_TEST(boost::fusion::count_if(t, bind1st<std::equal_to<double> >(2)) == 1);
|
||||
BOOST_TEST(boost::fusion::count_if(t, bind1st<mutable_equal_to<double> >(2)) == 1);
|
||||
}
|
||||
|
||||
{
|
||||
boost::fusion::vector<int, short, double> t(1, 2, 3.3);
|
||||
BOOST_TEST(boost::fusion::count_if(t, bind1st<std::equal_to<double> >(3)) == 0);
|
||||
BOOST_TEST(boost::fusion::count_if(t, bind1st<mutable_equal_to<double> >(3)) == 0);
|
||||
}
|
||||
|
||||
{
|
||||
@ -49,7 +39,6 @@ main()
|
||||
// Cannot use lambda here as mpl iterators return rvalues and lambda needs lvalues
|
||||
BOOST_TEST(boost::fusion::count_if(mpl_vec(), bind1st<std::greater_equal<int> >(2)) == 2);
|
||||
BOOST_TEST(boost::fusion::count_if(mpl_vec(), bind1st<std::less<int> >(2)) == 1);
|
||||
BOOST_TEST(boost::fusion::count_if(mpl_vec(), bind1st<mutable_equal_to<int> >(2)) == 1);
|
||||
}
|
||||
|
||||
return boost::report_errors();
|
||||
|
@ -1,25 +1,27 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2007 Dan Marsden
|
||||
Copyright (c) 2018 Kohei Takahashi
|
||||
|
||||
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/core/lightweight_test.hpp>
|
||||
#include <boost/fusion/adapted/mpl.hpp>
|
||||
#include <boost/fusion/algorithm/iteration/accumulate.hpp>
|
||||
#include <boost/fusion/algorithm/iteration/fold.hpp>
|
||||
#include <boost/fusion/container/generation/make_vector.hpp>
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
#include <boost/fusion/container/vector/vector.hpp>
|
||||
#include <boost/fusion/adapted/mpl.hpp>
|
||||
#include <boost/fusion/sequence/io/out.hpp>
|
||||
#include <boost/mpl/if.hpp>
|
||||
#include <boost/mpl/int.hpp>
|
||||
#include <boost/mpl/next.hpp>
|
||||
#include <boost/mpl/vector.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/at.hpp>
|
||||
#include <boost/fusion/container/generation/make_vector.hpp>
|
||||
#include <boost/fusion/algorithm/iteration/fold.hpp>
|
||||
#include <boost/fusion/algorithm/iteration/accumulate.hpp>
|
||||
#include <boost/type_traits/is_same.hpp>
|
||||
#include <boost/mpl/if.hpp>
|
||||
#include <boost/mpl/next.hpp>
|
||||
#include <boost/mpl/int.hpp>
|
||||
#include <boost/mpl/vector.hpp>
|
||||
|
||||
#include <boost/type_traits/remove_const.hpp>
|
||||
#include <boost/type_traits/remove_reference.hpp>
|
||||
#include <boost/type_traits/is_reference.hpp>
|
||||
|
||||
#include <string>
|
||||
|
||||
@ -128,7 +130,7 @@ struct functor
|
||||
}
|
||||
};
|
||||
|
||||
struct mutable_visitor
|
||||
struct visitor
|
||||
{
|
||||
typedef int result_type;
|
||||
|
||||
@ -246,7 +248,7 @@ main()
|
||||
|
||||
{
|
||||
boost::fusion::vector<long> vec;
|
||||
mutable_visitor v;
|
||||
visitor v;
|
||||
boost::fusion::fold(vec, 0, v);
|
||||
}
|
||||
}
|
||||
|
@ -1,12 +1,11 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2007 Dan Marsden
|
||||
Copyright (c) 2018 Kohei Takahashi
|
||||
|
||||
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/core/lightweight_test.hpp>
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
#include <boost/fusion/container/vector/vector.hpp>
|
||||
#include <boost/fusion/adapted/mpl.hpp>
|
||||
#include <boost/fusion/algorithm/query/none.hpp>
|
||||
@ -29,19 +28,6 @@ namespace
|
||||
|
||||
int search;
|
||||
};
|
||||
|
||||
struct mutable_search_for : search_for
|
||||
{
|
||||
explicit mutable_search_for(int in_search)
|
||||
: search_for(in_search)
|
||||
{}
|
||||
|
||||
template <typename T>
|
||||
bool operator()(T const& v)
|
||||
{
|
||||
return search_for::operator()(v);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
int
|
||||
@ -59,24 +45,12 @@ main()
|
||||
BOOST_TEST((!boost::fusion::none(t, boost::lambda::_1 < 3)));
|
||||
}
|
||||
|
||||
{
|
||||
boost::fusion::vector<int, short, double> t(1, 2, 3.3);
|
||||
BOOST_TEST(!boost::fusion::none(t, search_for(1)));
|
||||
BOOST_TEST(boost::fusion::none(t, search_for(3)));
|
||||
|
||||
BOOST_TEST(!boost::fusion::none(t, mutable_search_for(1)));
|
||||
BOOST_TEST(boost::fusion::none(t, mutable_search_for(3)));
|
||||
}
|
||||
|
||||
{
|
||||
typedef boost::mpl::vector_c<int, 1, 2, 3> mpl_vec;
|
||||
// We cannot use lambda here as mpl vec iterators return
|
||||
// rvalues, and lambda needs lvalues.
|
||||
BOOST_TEST(boost::fusion::none(mpl_vec(), search_for(4)));
|
||||
BOOST_TEST(!boost::fusion::none(mpl_vec(), search_for(3)));
|
||||
|
||||
BOOST_TEST(boost::fusion::none(mpl_vec(), mutable_search_for(4)));
|
||||
BOOST_TEST(!boost::fusion::none(mpl_vec(), mutable_search_for(3)));
|
||||
}
|
||||
|
||||
return boost::report_errors();
|
||||
|
@ -1,16 +1,19 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2018 Kohei Takahashi
|
||||
|
||||
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/core/lightweight_test.hpp>
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
#include <boost/fusion/container/vector/vector.hpp>
|
||||
#include <boost/fusion/container/generation/make_vector.hpp>
|
||||
#include <boost/fusion/adapted/mpl.hpp>
|
||||
#include <boost/fusion/adapted/mpl.hpp>
|
||||
#include <boost/fusion/sequence/io/out.hpp>
|
||||
#include <boost/fusion/sequence/comparison/equal_to.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/at.hpp>
|
||||
#include <boost/fusion/container/generation/make_vector.hpp>
|
||||
#include <boost/fusion/algorithm/transformation/replace_if.hpp>
|
||||
#include <string>
|
||||
|
||||
struct gt3
|
||||
{
|
||||
@ -21,15 +24,6 @@ struct gt3
|
||||
}
|
||||
};
|
||||
|
||||
struct mutable_gt3 : gt3
|
||||
{
|
||||
template <typename T>
|
||||
bool operator()(T x)
|
||||
{
|
||||
return gt3::operator()(x);
|
||||
}
|
||||
};
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
@ -48,18 +42,8 @@ main()
|
||||
|
||||
{
|
||||
std::cout << replace_if(t1, gt3(), -456) << std::endl;
|
||||
BOOST_TEST_EQ(replace_if(t1, gt3(), -456), make_vector(1, 2, -456, -456, s, -456));
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
char const* s = "Ruby";
|
||||
typedef vector<int, short, double, long, char const*, float> vector_type;
|
||||
vector_type t1(1, 2, 3.3, 4, s, 5.5f);
|
||||
|
||||
{
|
||||
std::cout << replace_if(t1, mutable_gt3(), -456) << std::endl;
|
||||
BOOST_TEST_EQ(replace_if(t1, mutable_gt3(), -456), make_vector(1, 2, -456, -456, s, -456));
|
||||
BOOST_TEST((replace_if(t1, gt3(), -456)
|
||||
== make_vector(1, 2, -456, -456, s, -456)));
|
||||
}
|
||||
}
|
||||
|
||||
|
41
test/algorithm/ticket-5490.cpp
Normal file
41
test/algorithm/ticket-5490.cpp
Normal file
@ -0,0 +1,41 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2018 Kohei Takahashi
|
||||
|
||||
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/fusion/include/vector.hpp>
|
||||
#include <boost/fusion/include/transform.hpp>
|
||||
#include <boost/mpl/quote.hpp>
|
||||
#include <boost/mpl/placeholders.hpp>
|
||||
#include <boost/core/ignore_unused.hpp>
|
||||
|
||||
using namespace boost::fusion;
|
||||
|
||||
template <typename>
|
||||
struct predicate {};
|
||||
|
||||
struct unique {};
|
||||
|
||||
template <typename>
|
||||
struct meta_func
|
||||
{
|
||||
typedef unique result_type;
|
||||
|
||||
template <typename T>
|
||||
unique operator()(const T&) const;
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
vector<int> v;
|
||||
|
||||
typedef predicate<boost::mpl::_1> lambda_t;
|
||||
typedef boost::mpl::quote1<predicate> quote_t;
|
||||
|
||||
vector<unique> l = transform(v, meta_func<lambda_t>());
|
||||
|
||||
vector<unique> q = transform(v, meta_func<quote_t>());
|
||||
|
||||
boost::ignore_unused(l, q);
|
||||
}
|
Reference in New Issue
Block a user