$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r82713 - in trunk/boost/fusion: container/map container/map/detail container/map/detail/cpp03 container/vector container/vector/detail support
From: joel_at_[hidden]
Date: 2013-02-06 20:25:08
Author: djowel
Date: 2013-02-04 01:21:45 EST (Mon, 04 Feb 2013)
New Revision: 82713
URL: http://svn.boost.org/trac/boost/changeset/82713
Log:
More map tests and more API features implemented + tweaks to affected components
Text files modified: 
   trunk/boost/fusion/container/map/detail/cpp03/map.hpp   |     9 +++++++--                               
   trunk/boost/fusion/container/map/detail/map_impl.hpp    |    11 +++++++++++                             
   trunk/boost/fusion/container/map/map.hpp                |    39 ++++++++++++++++++++++++++++++++++++--- 
   trunk/boost/fusion/container/vector/detail/vector_n.hpp |     2 +-                                      
   trunk/boost/fusion/container/vector/vector.hpp          |     7 +++++++                                 
   trunk/boost/fusion/support/pair.hpp                     |     6 ++++++                                  
   6 files changed, 68 insertions(+), 6 deletions(-)
Modified: trunk/boost/fusion/container/map/detail/cpp03/map.hpp
==============================================================================
--- trunk/boost/fusion/container/map/detail/cpp03/map.hpp	(original)
+++ trunk/boost/fusion/container/map/detail/cpp03/map.hpp	2013-02-04 01:21:45 EST (Mon, 04 Feb 2013)
@@ -74,13 +74,18 @@
         #include <boost/fusion/container/map/detail/cpp03/map_forward_ctor.hpp>
 
         template <typename T>
-        map&
-        operator=(T const& rhs)
+        map& operator=(T const& rhs)
         {
             data = rhs;
             return *this;
         }
 
+        map& operator=(map const& rhs)
+        {
+            data = rhs.data;
+            return *this;
+        }
+
         storage_type& get_data() { return data; }
         storage_type const& get_data() const { return data; }
 
Modified: trunk/boost/fusion/container/map/detail/map_impl.hpp
==============================================================================
--- trunk/boost/fusion/container/map/detail/map_impl.hpp	(original)
+++ trunk/boost/fusion/container/map/detail/map_impl.hpp	2013-02-04 01:21:45 EST (Mon, 04 Feb 2013)
@@ -38,6 +38,10 @@
         map_impl(Iterator const& iter, map_impl_from_iterator)
         {}
 
+        template <typename Iterator>
+        void assign(Iterator const& iter, map_impl_from_iterator)
+        {}
+
         void get();
         void get_val();
         void get_key();
@@ -158,6 +162,13 @@
             return *this;
         }
 
+        template <typename Iterator>
+        void assign(Iterator const& iter, map_impl_from_iterator fi)
+        {
+            rest_type::assign(fusion::next(iter), fi);
+            element = *iter;
+        }
+
         Pair element;
     };
 }}}
Modified: trunk/boost/fusion/container/map/map.hpp
==============================================================================
--- trunk/boost/fusion/container/map/map.hpp	(original)
+++ trunk/boost/fusion/container/map/map.hpp	2013-02-04 01:21:45 EST (Mon, 04 Feb 2013)
@@ -8,6 +8,7 @@
 #define FUSION_MAP_MAIN_07212005_1106
 
 #include <boost/fusion/container/map/map_fwd.hpp>
+#include <boost/fusion/support/pair.hpp>
 
 ///////////////////////////////////////////////////////////////////////////////
 // Without variadics, we will use the PP version
@@ -29,9 +30,12 @@
 #include <boost/fusion/sequence/intrinsic/end.hpp>
 #include <boost/fusion/sequence/intrinsic/at.hpp>
 #include <boost/fusion/sequence/intrinsic/at_c.hpp>
+#include <boost/fusion/support/is_sequence.hpp>
 #include <boost/fusion/support/sequence_base.hpp>
 #include <boost/fusion/support/category_of.hpp>
 
+#include <boost/utility/enable_if.hpp>
+
 namespace boost { namespace fusion
 {
     struct map_tag;
@@ -46,11 +50,40 @@
         typedef mpl::int_<base_type::size> size;
         typedef mpl::false_ is_view;
 
-        map() {};
+        map() {}
+
+        template <typename Sequence>
+        map(Sequence const& seq
+          , typename enable_if<traits::is_sequence<Sequence>>::type* /*dummy*/ = 0)
+          : base_type(begin(seq), detail::map_impl_from_iterator())
+        {}
 
-        map(typename detail::call_param<T>::type... element)
-          : base_type(element...)
+        template <typename First, typename ...T_>
+        map(First const& first, T_ const&... rest)
+          : base_type(first, rest...)
         {}
+
+        template <typename First, typename ...T_>
+        map(First& first, T_&... rest)
+          : base_type(first, rest...)
+        {}
+
+        map& operator=(map const& rhs)
+        {
+            base_type::operator=(rhs.base());
+            return *this;
+        }
+
+        template <typename Sequence>
+        typename enable_if<traits::is_sequence<Sequence>, map&>::type
+        operator=(Sequence const& seq)
+        {
+            base().assign(begin(seq), detail::map_impl_from_iterator());
+            return *this;
+        }
+
+        base_type& base() { return *this; }
+        base_type const& base() const { return *this; }
     };
 }}
 
Modified: trunk/boost/fusion/container/vector/detail/vector_n.hpp
==============================================================================
--- trunk/boost/fusion/container/vector/detail/vector_n.hpp	(original)
+++ trunk/boost/fusion/container/vector/detail/vector_n.hpp	2013-02-04 01:21:45 EST (Mon, 04 Feb 2013)
@@ -204,7 +204,7 @@
         BOOST_PP_CAT(vector, N)&
         operator=(BOOST_PP_CAT(vector, N) const& vec)
         {
-            base_type::operator=(*this);
+            base_type::operator=(vec);
             return *this;
         }
 
Modified: trunk/boost/fusion/container/vector/vector.hpp
==============================================================================
--- trunk/boost/fusion/container/vector/vector.hpp	(original)
+++ trunk/boost/fusion/container/vector/vector.hpp	2013-02-04 01:21:45 EST (Mon, 04 Feb 2013)
@@ -140,6 +140,13 @@
             return *this;
         }
 
+        vector&
+        operator=(vector const& rhs)
+        {
+            vec = rhs.vec;
+            return *this;
+        }
+
 #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
         vector&
         operator=(vector&& rhs)
Modified: trunk/boost/fusion/support/pair.hpp
==============================================================================
--- trunk/boost/fusion/support/pair.hpp	(original)
+++ trunk/boost/fusion/support/pair.hpp	2013-02-04 01:21:45 EST (Mon, 04 Feb 2013)
@@ -42,6 +42,12 @@
             return *this;
         }
 
+        pair& operator=(pair const& rhs)
+        {
+            second = rhs.second;
+            return *this;
+        }
+
         typedef First first_type;
         typedef Second second_type;
         Second second;