|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r59609 - in sandbox/statistics/detail/assign: boost/assign boost/assign/detail libs/assign/example
From: erwann.rogard_at_[hidden]
Date: 2010-02-09 20:11:51
Author: e_r
Date: 2010-02-09 20:11:50 EST (Tue, 09 Feb 2010)
New Revision: 59609
URL: http://svn.boost.org/trac/boost/changeset/59609
Log:
m
Text files modified:
sandbox/statistics/detail/assign/boost/assign/cref_list_of2.hpp | 41 ++++++++++++++++++++++++++++-----------
sandbox/statistics/detail/assign/boost/assign/detail/assign_value.hpp | 5 ++++
sandbox/statistics/detail/assign/libs/assign/example/cref_list_of2.cpp | 10 ++++----
3 files changed, 39 insertions(+), 17 deletions(-)
Modified: sandbox/statistics/detail/assign/boost/assign/cref_list_of2.hpp
==============================================================================
--- sandbox/statistics/detail/assign/boost/assign/cref_list_of2.hpp (original)
+++ sandbox/statistics/detail/assign/boost/assign/cref_list_of2.hpp 2010-02-09 20:11:50 EST (Tue, 09 Feb 2010)
@@ -30,12 +30,21 @@
// std::vector<T> vec = cref_list_of(a)(b)(c);
// Usage 2:
// boost::fill( ref_list_of(a)(b)(c) , 0);
- //
- // For rebind semantics use ref_rebind_list_of(a)(b)(c)
+ // Usage 3:
+ // BOOST_AUTO(tmp,ref_rebind_list_of(a)(b)(c)); boost::fill(tmp,d);
//
// Acknowledgement: The idea of this class was developed in collaboration
// with M.P.G
-
+ //
+ // Revision history:
+ // Feb 9, 2010 :
+ // - Added copy semantics.
+ // - temporary array in conversion operator is now assigned by call to
+ // begin() and end() rather than write_to_array() to ensure consistency of
+ // side effect when assigning with rebind semantics. The loss of performan-
+ // ce is neligible in the test.
+ // Feb 5, 2010 : First version. rebind semantics.
+
namespace cref_list_of_impl{
typedef boost::mpl::void_ top_;
@@ -89,18 +98,22 @@
template<typename T1>
operator boost::array<T1,N>(){
- typedef boost::array<T1,N> ar_;
- ar_ ar;
- write_to_array(ar,*this);
+ boost::array<T1,N> ar;
+ std::copy(
+ boost::begin(this->ref_array()),
+ boost::end(this->ref_array()),
+ boost::begin(ar)
+ );
return ar;
}
template<typename C>
operator C()
{
- ref_array_ ref_array;
- write_to_array(ref_array,*this);
- return C(boost::begin(ref_array),boost::end(ref_array));
+ return C(
+ boost::begin(this->ref_array()),
+ boost::end(this->ref_array())
+ );
}
// -------- as container ---- //
@@ -115,13 +128,12 @@
iterator begin()
{
- this->alloc_if();
- return boost::begin(*this->ptr);
+ return boost::begin(this->ref_array());
}
iterator end()
{
this->alloc_if();
- return boost::end(*this->ptr);
+ return boost::end(this->ref_array());
}
size_type size() const
{
@@ -143,6 +155,11 @@
return this->alloc();
}
}
+
+ ref_array_& ref_array(){
+ this->alloc_if();
+ return (*this->ptr);
+ }
typedef boost::shared_ptr<ref_array_> smart_ptr_;
smart_ptr_ ptr;
Modified: sandbox/statistics/detail/assign/boost/assign/detail/assign_value.hpp
==============================================================================
--- sandbox/statistics/detail/assign/boost/assign/detail/assign_value.hpp (original)
+++ sandbox/statistics/detail/assign/boost/assign/detail/assign_value.hpp 2010-02-09 20:11:50 EST (Tue, 09 Feb 2010)
@@ -36,6 +36,11 @@
return *ref_;
}
+ //template<typename T1>
+ //operator T1()const{
+ // return *ref_;
+ //}
+
void swap( assign_value& r )
{
std::swap( *ref_, *r.ref_ );
Modified: sandbox/statistics/detail/assign/libs/assign/example/cref_list_of2.cpp
==============================================================================
--- sandbox/statistics/detail/assign/libs/assign/example/cref_list_of2.cpp (original)
+++ sandbox/statistics/detail/assign/libs/assign/example/cref_list_of2.cpp 2010-02-09 20:11:50 EST (Tue, 09 Feb 2010)
@@ -68,7 +68,7 @@
BOOST_ASSERT(ints[1] == b);
BOOST_ASSERT(ints[2] == c);
array = array0;
- array = ref_list_of(a)(b)(c);
+ array = cref_list_of(a)(b)(c);
BOOST_ASSERT(array[0] == a);
BOOST_ASSERT(array[1] == b);
BOOST_ASSERT(array[2] == c);
@@ -114,11 +114,11 @@
BOOST_ASSERT(ints[2] == d);
}
{
- // TODO : resolve inconsistency here
+ // Before rev. Feb 8, 2010, there was an inconsistency here
ints = tmp;
- BOOST_ASSERT(ints[0] == a);
- BOOST_ASSERT(ints[1] == b);
- BOOST_ASSERT(ints[2] == c);
+ BOOST_ASSERT(ints[0] == d);
+ BOOST_ASSERT(ints[1] == d);
+ BOOST_ASSERT(ints[2] == d);
}
}
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk