X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6712283cf1b562897bfc36c54da5e03c05f402ed..4f2511d706e5274a34e1521e11c1b95fed735b42:/include/wx/vector.h diff --git a/include/wx/vector.h b/include/wx/vector.h index f7aac0b20b..df491781a0 100644 --- a/include/wx/vector.h +++ b/include/wx/vector.h @@ -102,12 +102,19 @@ struct wxVectorMemOpsGeneric template class wxVector - // this cryptic expression means "derive from wxVectorMemOpsMovable if - // type T is movable type, otherwise derive from wxVectorMemOpsGeneric - : private wxIf< wxIsMovable::value, - wxPrivate::wxVectorMemOpsMovable, - wxPrivate::wxVectorMemOpsGeneric >::value { +private: + // This cryptic expression means "typedef Ops to wxVectorMemOpsMovable if + // type T is movable type, otherwise to wxVectorMemOpsGeneric". + // + // Note that we use typedef instead of privately deriving from this (which + // would allowed us to omit "Ops::" prefixes below) to keep VC6 happy, + // it can't compile code that derives from wxIf<...>::value. + typedef typename wxIf< wxIsMovable::value, + wxPrivate::wxVectorMemOpsMovable, + wxPrivate::wxVectorMemOpsGeneric >::value + Ops; + public: typedef size_t size_type; typedef T value_type; @@ -117,7 +124,7 @@ public: wxVector() : m_size(0), m_capacity(0), m_values(NULL) {} - wxVector(const wxVector& c) + wxVector(const wxVector& c) : m_size(0), m_capacity(0), m_values(NULL) { Copy(c); } @@ -135,9 +142,10 @@ public: m_values[i].~T(); } - Free(m_values); + Ops::Free(m_values); m_values = NULL; - m_size = m_capacity = 0; + m_size = + m_capacity = 0; } void reserve(size_type n) @@ -156,7 +164,7 @@ public: if ( m_capacity + increment > n ) n = m_capacity + increment; - m_values = Realloc(m_values, n * sizeof(value_type), m_size); + m_values = Ops::Realloc(m_values, n * sizeof(value_type), m_size); m_capacity = n; } @@ -177,6 +185,7 @@ public: wxVector& operator=(const wxVector& vb) { + clear(); Copy(vb); return *this; } @@ -239,7 +248,7 @@ public: // the way: if ( after > 0 ) { - MemmoveForward(m_values + idx + 1, m_values + idx, after); + Ops::MemmoveForward(m_values + idx + 1, m_values + idx, after); } #if wxUSE_EXCEPTIONS @@ -258,7 +267,7 @@ public: // back to their original positions in m_values if ( after > 0 ) { - MemmoveBackward(m_values + idx, m_values + idx + 1, after); + Ops::MemmoveBackward(m_values + idx, m_values + idx + 1, after); } throw; // rethrow the exception @@ -295,7 +304,7 @@ public: // once that's done, move following elements over to the freed space: if ( after > 0 ) { - MemmoveBackward(m_values + idx, m_values + idx + count, after); + Ops::MemmoveBackward(m_values + idx, m_values + idx + count, after); } m_size -= count; @@ -314,7 +323,6 @@ private: void Copy(const wxVector& vb) { - clear(); reserve(vb.size()); for ( const_iterator i = vb.begin(); i != vb.end(); ++i )