explicit copy and assignment for shared_vector

Add explicit copy constructor and
assignment operator for shared_vector.
This commit is contained in:
Michael Davidsaver
2013-06-10 12:07:27 -04:00
parent ac53153bea
commit 0b89f08d09
2 changed files with 26 additions and 2 deletions

View File

@@ -113,6 +113,11 @@ namespace detail {
:m_data(d,b), m_offset(o), m_count(c), m_total(c)
{_null_input();}
shared_vector_base(const shared_vector_base& O)
:m_data(O.m_data), m_offset(O.m_offset)
,m_count(O.m_count), m_total(O.m_total)
{}
template<typename E1>
shared_vector_base(const shared_vector_base<E1>& o)
: m_data(vector_implicit_cast<E1,E>::cast(o.m_data))
@@ -131,6 +136,19 @@ namespace detail {
return *this;
}
//! @brief Copy an existing vector of a related type
template<typename E1>
shared_vector_base& operator=(const shared_vector_base<E1>& o)
{
if(&o!=this) {
m_data=vector_implicit_cast<E1,E>::cast(o.m_data);
m_offset=o.m_offset;
m_count=o.m_count;
m_total=o.m_total;
}
return *this;
}
//! @brief Swap the contents of this vector with another
void swap(shared_vector_base& o) {
if(&o!=this) {
@@ -284,7 +302,10 @@ public:
shared_vector(A d, B b, size_t o, size_t c)
:base_t(d,b,o,c) {}
//! @brief Copy an existing vector of same or related type
//! @brief Copy an existing vector of same type
shared_vector(const shared_vector& o) :base_t(o) {}
//! @brief Copy an existing vector of a related type
template<typename E1>
shared_vector(const shared_vector<E1>& o) :base_t(o) {}

View File

@@ -212,6 +212,9 @@ static void testConst()
testOk1(wcr==rocr);
rodata = writable;
testOk1(rodata.data()==writable.data());
// Data is R/W, but container can't be re-targeted
const epics::pvData::shared_vector<int> roref(writable);
@@ -381,7 +384,7 @@ static void testNonPOD()
MAIN(testSharedVector)
{
testPlan(115);
testPlan(116);
testDiag("Tests for shared_vector");
testDiag("sizeof(shared_vector<int>)=%lu",