From d1cc519a4412ee8e350f73b15bb4ef353f9b0664 Mon Sep 17 00:00:00 2001 From: Dan Marsden Date: Tue, 6 Mar 2007 21:37:26 +0000 Subject: [PATCH] unused entries in zip [SVN r37150] --- .../sequence/view/zip_view/detail/at_impl.hpp | 14 ++++- .../view/zip_view/detail/begin_impl.hpp | 12 +++- .../view/zip_view/detail/deref_impl.hpp | 13 +++- .../view/zip_view/detail/end_impl.hpp | 24 ++++++- .../view/zip_view/detail/next_impl.hpp | 13 +++- .../view/zip_view/detail/prior_impl.hpp | 13 +++- .../view/zip_view/detail/value_at_impl.hpp | 8 ++- .../view/zip_view/detail/value_of_impl.hpp | 8 ++- .../sequence/view/zip_view/zip_view.hpp | 7 ++- include/boost/fusion/support.hpp | 1 + include/boost/fusion/support/unused.hpp | 62 +++++++++++++++++++ 11 files changed, 163 insertions(+), 12 deletions(-) create mode 100644 include/boost/fusion/support/unused.hpp diff --git a/include/boost/fusion/sequence/view/zip_view/detail/at_impl.hpp b/include/boost/fusion/sequence/view/zip_view/detail/at_impl.hpp index ff16e9bd..353fb5eb 100644 --- a/include/boost/fusion/sequence/view/zip_view/detail/at_impl.hpp +++ b/include/boost/fusion/sequence/view/zip_view/detail/at_impl.hpp @@ -15,6 +15,11 @@ #include #include #include +#include +#include +#include +#include + namespace boost { namespace fusion { @@ -27,7 +32,9 @@ namespace boost { namespace fusion { template struct result - : result_of::at::type, N> + : mpl::eval_if, + mpl::identity, + result_of::at::type, N> > { BOOST_MPL_ASSERT((is_reference)); }; @@ -45,6 +52,11 @@ namespace boost { namespace fusion { return fusion::at(seq); } + + unused_type operator()(unused_type const&) const + { + return unused_type(); + } }; } diff --git a/include/boost/fusion/sequence/view/zip_view/detail/begin_impl.hpp b/include/boost/fusion/sequence/view/zip_view/detail/begin_impl.hpp index 744052c7..37ed2a8d 100644 --- a/include/boost/fusion/sequence/view/zip_view/detail/begin_impl.hpp +++ b/include/boost/fusion/sequence/view/zip_view/detail/begin_impl.hpp @@ -13,7 +13,11 @@ #include #include #include +#include #include +#include +#include +#include namespace boost { namespace fusion { @@ -25,7 +29,9 @@ namespace boost { namespace fusion { { template struct result - : result_of::begin::type> + : mpl::eval_if, + mpl::identity, + result_of::begin::type> > { BOOST_MPL_ASSERT((is_reference)); }; @@ -44,6 +50,10 @@ namespace boost { namespace fusion { return fusion::begin(seq); } + unused_type operator()(unused_type const&) const + { + return unused_type(); + } }; } diff --git a/include/boost/fusion/sequence/view/zip_view/detail/deref_impl.hpp b/include/boost/fusion/sequence/view/zip_view/detail/deref_impl.hpp index 0d263e25..ee7399fc 100644 --- a/include/boost/fusion/sequence/view/zip_view/detail/deref_impl.hpp +++ b/include/boost/fusion/sequence/view/zip_view/detail/deref_impl.hpp @@ -12,6 +12,10 @@ #include #include #include +#include +#include +#include +#include namespace boost { namespace fusion { @@ -23,7 +27,9 @@ namespace boost { namespace fusion { { template struct result - : result_of::deref + : mpl::eval_if, + mpl::identity, + result_of::deref > {}; template @@ -32,6 +38,11 @@ namespace boost { namespace fusion { { return fusion::deref(it); } + + unused_type operator()(unused_type const&) const + { + return unused_type(); + } }; } diff --git a/include/boost/fusion/sequence/view/zip_view/detail/end_impl.hpp b/include/boost/fusion/sequence/view/zip_view/detail/end_impl.hpp index 40c05f89..9f4b66cc 100644 --- a/include/boost/fusion/sequence/view/zip_view/detail/end_impl.hpp +++ b/include/boost/fusion/sequence/view/zip_view/detail/end_impl.hpp @@ -20,21 +20,34 @@ #include #include +#include +#include +#include + namespace boost { namespace fusion { struct zip_view_tag; namespace detail { + template + struct get_endpoint + { + typedef typename remove_reference::type Seq; + typedef typename result_of::begin::type begin; + typedef typename result_of::advance::type type; + }; + template struct endpoints { template struct result + : mpl::eval_if, + mpl::identity, + get_endpoint > { - typedef typename remove_reference::type Seq; - typedef typename result_of::begin::type begin; - typedef typename result_of::advance::type type; + BOOST_MPL_ASSERT((is_reference)); }; template @@ -50,6 +63,11 @@ namespace boost { namespace fusion { { return fusion::advance(fusion::begin(seq)); } + + unused_type operator()(unused_type const&) const + { + return unused_type(); + } }; } diff --git a/include/boost/fusion/sequence/view/zip_view/detail/next_impl.hpp b/include/boost/fusion/sequence/view/zip_view/detail/next_impl.hpp index b2fb781f..b5b6e60d 100644 --- a/include/boost/fusion/sequence/view/zip_view/detail/next_impl.hpp +++ b/include/boost/fusion/sequence/view/zip_view/detail/next_impl.hpp @@ -11,6 +11,10 @@ #include #include #include +#include +#include +#include +#include namespace boost { namespace fusion { @@ -22,7 +26,9 @@ namespace boost { namespace fusion { { template struct result - : result_of::next + : mpl::eval_if, + mpl::identity, + result_of::next > {}; template @@ -31,6 +37,11 @@ namespace boost { namespace fusion { { return fusion::next(it); } + + unused_type operator()(unused_type const&) const + { + return unused_type(); + } }; } diff --git a/include/boost/fusion/sequence/view/zip_view/detail/prior_impl.hpp b/include/boost/fusion/sequence/view/zip_view/detail/prior_impl.hpp index 9c8b8146..c174e0cc 100644 --- a/include/boost/fusion/sequence/view/zip_view/detail/prior_impl.hpp +++ b/include/boost/fusion/sequence/view/zip_view/detail/prior_impl.hpp @@ -11,6 +11,10 @@ #include #include #include +#include +#include +#include +#include namespace boost { namespace fusion { @@ -22,7 +26,9 @@ namespace boost { namespace fusion { { template struct result - : result_of::prior + : mpl::eval_if, + mpl::identity, + result_of::prior > {}; template @@ -31,6 +37,11 @@ namespace boost { namespace fusion { { return fusion::prior(it); } + + unused_type operator()(unused_type const&) const + { + return unused_type(); + } }; } diff --git a/include/boost/fusion/sequence/view/zip_view/detail/value_at_impl.hpp b/include/boost/fusion/sequence/view/zip_view/detail/value_at_impl.hpp index d0f2f44d..1fb298ec 100644 --- a/include/boost/fusion/sequence/view/zip_view/detail/value_at_impl.hpp +++ b/include/boost/fusion/sequence/view/zip_view/detail/value_at_impl.hpp @@ -12,6 +12,10 @@ #include #include #include +#include +#include +#include +#include namespace boost { namespace fusion { @@ -24,7 +28,9 @@ namespace boost { namespace fusion { { template struct result - : result_of::value_at::type, N> + : mpl::eval_if, + mpl::identity, + result_of::value_at::type, N> > {}; }; } diff --git a/include/boost/fusion/sequence/view/zip_view/detail/value_of_impl.hpp b/include/boost/fusion/sequence/view/zip_view/detail/value_of_impl.hpp index 7f55d8fa..e8237ec1 100644 --- a/include/boost/fusion/sequence/view/zip_view/detail/value_of_impl.hpp +++ b/include/boost/fusion/sequence/view/zip_view/detail/value_of_impl.hpp @@ -12,6 +12,10 @@ #include #include #include +#include +#include +#include +#include namespace boost { namespace fusion { @@ -23,7 +27,9 @@ namespace boost { namespace fusion { { template struct result - : result_of::value_of + : mpl::eval_if, + mpl::identity, + result_of::value_of > {}; }; } diff --git a/include/boost/fusion/sequence/view/zip_view/zip_view.hpp b/include/boost/fusion/sequence/view/zip_view/zip_view.hpp index 2d1892b1..f3bc5cd9 100644 --- a/include/boost/fusion/sequence/view/zip_view/zip_view.hpp +++ b/include/boost/fusion/sequence/view/zip_view/zip_view.hpp @@ -9,6 +9,7 @@ #define FUSION_ZIP_VIEW_23012006_0813 #include +#include #include #include #include @@ -21,6 +22,7 @@ #include #include #include +#include #include #include @@ -73,13 +75,14 @@ namespace boost { namespace fusion { template struct zip_view : sequence_base< zip_view > { + typedef typename result_of::remove::type real_sequences; BOOST_MPL_ASSERT((detail::all_references)); - typedef typename detail::strictest_traversal::type category; + typedef typename detail::strictest_traversal::type category; typedef zip_view_tag fusion_tag; typedef fusion_sequence_tag tag; // this gets picked up by MPL typedef mpl::true_ is_view; typedef typename fusion::result_of::as_vector::type sequences; - typedef typename detail::min_size::type size; + typedef typename detail::min_size::type size; zip_view( const Sequences& seqs) diff --git a/include/boost/fusion/support.hpp b/include/boost/fusion/support.hpp index ba652d7d..012ee107 100644 --- a/include/boost/fusion/support.hpp +++ b/include/boost/fusion/support.hpp @@ -17,5 +17,6 @@ #include #include #include +#include #endif diff --git a/include/boost/fusion/support/unused.hpp b/include/boost/fusion/support/unused.hpp new file mode 100644 index 00000000..dc2014ec --- /dev/null +++ b/include/boost/fusion/support/unused.hpp @@ -0,0 +1,62 @@ +/*============================================================================= + Copyright (c) 2001-2006 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_SUPPORT_UNUSED_20070305_1038) +#define BOOST_FUSION_SUPPORT_UNUSED_20070305_1038 + +#include +#if defined(BOOST_MSVC) +# pragma warning(push) +# pragma warning(disable: 4522) // multiple assignment operators specified warning +#endif + +namespace boost { namespace fusion { + struct unused_type + { + unused_type() + { + } + + template + unused_type(T const&) + { + } + + template + unused_type const& + operator=(T const&) const + { + return *this; + } + + template + unused_type& + operator=(T const&) + { + return *this; + } + + unused_type const& + operator=(unused_type const&) const + { + return *this; + } + + unused_type& + operator=(unused_type const&) + { + return *this; + } + }; + + unused_type const unused = unused_type(); +}} + +#if defined(BOOST_MSVC) +# pragma warning(pop) +#endif + +#endif