From: Francesco Pretto <cez...@gmail.com>
Inheritance is unsafe and it was probably unhintended (PdfDictionary doesn't inherit stl containers). --- src/base/PdfArray.cpp | 8 ++-- src/base/PdfArray.h | 86 +++++++++++++++++++++++++------------------ 2 files changed, 55 insertions(+), 39 deletions(-)
diff --git a/src/base/PdfArray.cpp b/src/base/PdfArray.cpp index b65dcf8..f44b64b 100644 --- a/src/base/PdfArray.cpp +++ b/src/base/PdfArray.cpp @@ -41,7 +41,7 @@ namespace PoDoFo { PdfArray::PdfArray() - : PdfArrayBaseClass(), PdfDataType(), m_bDirty( false ) + : PdfDataType(), m_bDirty( false ) { } @@ -50,13 +50,13 @@ PdfArray::~PdfArray() } PdfArray::PdfArray( const PdfObject & var ) - : PdfArrayBaseClass(), PdfDataType(), m_bDirty( false ) + : PdfDataType(), m_bDirty( false ) { this->push_back( var ); } PdfArray::PdfArray( const PdfArray & rhs ) - : PdfArrayBaseClass(rhs), PdfDataType(rhs), m_bDirty(rhs.m_bDirty) + : PdfDataType( rhs ), m_bDirty( rhs.m_bDirty ), m_objects( rhs.m_objects ) { this->operator=( rhs ); } @@ -67,7 +67,7 @@ PdfArray& PdfArray::operator=(const PdfArray& rhs) if (this != &rhs) { m_bDirty = rhs.m_bDirty; - PdfArrayBaseClass::operator=( rhs ); + m_objects = rhs.m_objects; } else { diff --git a/src/base/PdfArray.h b/src/base/PdfArray.h index 88254e6..ce4d177 100644 --- a/src/base/PdfArray.h +++ b/src/base/PdfArray.h @@ -47,8 +47,6 @@ namespace PoDoFo { -typedef std::vector<PdfObject> PdfArrayBaseClass; - /** This class represents a PdfArray * Use it for all arrays that are written to a PDF file. * @@ -56,12 +54,16 @@ typedef std::vector<PdfObject> PdfArrayBaseClass; * * \see PdfVariant */ -class PODOFO_API PdfArray : private PdfArrayBaseClass, public PdfDataType { +class PODOFO_API PdfArray : public PdfDataType { public: - typedef PdfArrayBaseClass::iterator iterator; - typedef PdfArrayBaseClass::const_iterator const_iterator; - typedef PdfArrayBaseClass::reverse_iterator reverse_iterator; - typedef PdfArrayBaseClass::const_reverse_iterator const_reverse_iterator; + typedef size_t size_type; + typedef PdfObject value_type; + typedef value_type & reference; + typedef const value_type & const_reference; + typedef std::vector<value_type>::iterator iterator; + typedef std::vector<value_type>::const_iterator const_iterator; + typedef std::vector<value_type>::reverse_iterator reverse_iterator; + typedef std::vector<value_type>::const_reverse_iterator const_reverse_iterator; /** Create an empty array */ @@ -133,6 +135,10 @@ class PODOFO_API PdfArray : private PdfArrayBaseClass, public PdfDataType { */ inline void push_back( const PdfObject & var ); + /** Remove all elements from the array + */ + inline void clear(); + /** * \returns the size of the array */ @@ -150,7 +156,7 @@ class PODOFO_API PdfArray : private PdfArrayBaseClass, public PdfDataType { * Resize the internal vector. * \param __n new size */ - inline void resize(size_t __n, value_type __x = PdfArrayBaseClass::value_type()); + inline void resize(size_t __n, value_type __x = value_type()); /** * Returns a read/write iterator that points to the first @@ -277,7 +283,7 @@ class PODOFO_API PdfArray : private PdfArrayBaseClass, public PdfDataType { private: bool m_bDirty; ///< Indicates if this object was modified after construction - + std::vector<PdfObject> m_objects; }; // ----------------------------------------------------- @@ -287,7 +293,7 @@ void PdfArray::Clear() { AssertMutable(); - this->clear(); + m_objects.clear(); } // ----------------------------------------------------- @@ -305,16 +311,26 @@ void PdfArray::push_back( const PdfObject & var ) { AssertMutable(); - PdfArrayBaseClass::push_back( var ); + m_objects.push_back( var ); m_bDirty = true; } +// ----------------------------------------------------- +// +// ----------------------------------------------------- +void PdfArray::clear() +{ + AssertMutable(); + + m_objects.clear(); +} + // ----------------------------------------------------- // // ----------------------------------------------------- size_t PdfArray::size() const { - return PdfArrayBaseClass::size(); + return m_objects.size(); } // ----------------------------------------------------- @@ -322,7 +338,7 @@ size_t PdfArray::size() const // ----------------------------------------------------- bool PdfArray::empty() const { - return PdfArrayBaseClass::empty(); + return m_objects.empty(); } // ----------------------------------------------------- @@ -332,7 +348,7 @@ PdfObject& PdfArray::operator[](size_type __n) { AssertMutable(); - return PdfArrayBaseClass::operator[](__n); + return m_objects[__n]; } // ----------------------------------------------------- @@ -340,7 +356,7 @@ PdfObject& PdfArray::operator[](size_type __n) // ----------------------------------------------------- const PdfObject& PdfArray::operator[](size_type __n) const { - return PdfArrayBaseClass::operator[](__n); + return m_objects[__n]; } // ----------------------------------------------------- @@ -348,7 +364,7 @@ const PdfObject& PdfArray::operator[](size_type __n) const // ----------------------------------------------------- void PdfArray::resize(size_t __n, value_type __x) { - PdfArrayBaseClass::resize(__n, __x); + m_objects.resize(__n, __x); } // ----------------------------------------------------- @@ -356,7 +372,7 @@ void PdfArray::resize(size_t __n, value_type __x) // ----------------------------------------------------- PdfArray::iterator PdfArray::begin() { - return PdfArrayBaseClass::begin(); + return m_objects.begin(); } // ----------------------------------------------------- @@ -364,7 +380,7 @@ PdfArray::iterator PdfArray::begin() // ----------------------------------------------------- PdfArray::const_iterator PdfArray::begin() const { - return PdfArrayBaseClass::begin(); + return m_objects.begin(); } // ----------------------------------------------------- @@ -372,7 +388,7 @@ PdfArray::const_iterator PdfArray::begin() const // ----------------------------------------------------- PdfArray::iterator PdfArray::end() { - return PdfArrayBaseClass::end(); + return m_objects.end(); } // ----------------------------------------------------- @@ -380,7 +396,7 @@ PdfArray::iterator PdfArray::end() // ----------------------------------------------------- PdfArray::const_iterator PdfArray::end() const { - return PdfArrayBaseClass::end(); + return m_objects.end(); } // ----------------------------------------------------- @@ -388,7 +404,7 @@ PdfArray::const_iterator PdfArray::end() const // ----------------------------------------------------- PdfArray::reverse_iterator PdfArray::rbegin() { - return PdfArrayBaseClass::rbegin(); + return m_objects.rbegin(); } // ----------------------------------------------------- @@ -396,7 +412,7 @@ PdfArray::reverse_iterator PdfArray::rbegin() // ----------------------------------------------------- PdfArray::const_reverse_iterator PdfArray::rbegin() const { - return PdfArrayBaseClass::rbegin(); + return m_objects.rbegin(); } // ----------------------------------------------------- @@ -404,7 +420,7 @@ PdfArray::const_reverse_iterator PdfArray::rbegin() const // ----------------------------------------------------- PdfArray::reverse_iterator PdfArray::rend() { - return PdfArrayBaseClass::rend(); + return m_objects.rend(); } // ----------------------------------------------------- @@ -412,7 +428,7 @@ PdfArray::reverse_iterator PdfArray::rend() // ----------------------------------------------------- PdfArray::const_reverse_iterator PdfArray::rend() const { - return PdfArrayBaseClass::rend(); + return m_objects.rend(); } // ----------------------------------------------------- @@ -431,7 +447,7 @@ void PdfArray::insert(const PdfArray::iterator& __position, { AssertMutable(); - PdfArrayBaseClass::insert( __position, __first, __last ); + m_objects.insert( __position, __first, __last ); m_bDirty = true; } @@ -443,7 +459,7 @@ PdfArray::iterator PdfArray::insert(const iterator& __position, const PdfObject AssertMutable(); m_bDirty = true; - return PdfArrayBaseClass::insert( __position, val ); + return m_objects.insert( __position, val ); } // ----------------------------------------------------- @@ -453,7 +469,7 @@ void PdfArray::erase( const iterator& pos ) { AssertMutable(); - PdfArrayBaseClass::erase( pos ); + m_objects.erase( pos ); m_bDirty = true; } @@ -464,7 +480,7 @@ void PdfArray::erase( const iterator& first, const iterator& last ) { AssertMutable(); - PdfArrayBaseClass::erase( first, last ); + m_objects.erase( first, last ); m_bDirty = true; } @@ -473,7 +489,7 @@ void PdfArray::erase( const iterator& first, const iterator& last ) // ----------------------------------------------------- void PdfArray::reserve(size_type __n) { - PdfArrayBaseClass::reserve( __n ); + m_objects.reserve( __n ); } // ----------------------------------------------------- @@ -481,7 +497,7 @@ void PdfArray::reserve(size_type __n) // ----------------------------------------------------- PdfObject & PdfArray::front() { - return PdfArrayBaseClass::front(); + return m_objects.front(); } // ----------------------------------------------------- @@ -489,7 +505,7 @@ PdfObject & PdfArray::front() // ----------------------------------------------------- const PdfObject & PdfArray::front() const { - return PdfArrayBaseClass::front(); + return m_objects.front(); } // ----------------------------------------------------- @@ -497,7 +513,7 @@ const PdfObject & PdfArray::front() const // ----------------------------------------------------- PdfObject & PdfArray::back() { - return PdfArrayBaseClass::back(); + return m_objects.back(); } // ----------------------------------------------------- @@ -505,7 +521,7 @@ PdfObject & PdfArray::back() // ----------------------------------------------------- const PdfObject & PdfArray::back() const { - return PdfArrayBaseClass::back(); + return m_objects.back(); } // ----------------------------------------------------- @@ -514,7 +530,7 @@ const PdfObject & PdfArray::back() const bool PdfArray::operator==( const PdfArray & rhs ) const { //TODO: This operator does not check for m_bDirty. Add comparison or add explanation why it should not be there - return (static_cast< PdfArrayBaseClass >(*this) == static_cast< PdfArrayBaseClass >(rhs) ); + return m_objects == rhs.m_objects; } // ----------------------------------------------------- @@ -523,7 +539,7 @@ bool PdfArray::operator==( const PdfArray & rhs ) const bool PdfArray::operator!=( const PdfArray & rhs ) const { //TODO: This operator does not check for m_bDirty. Add comparison or add explanation why it should not be there - return (static_cast< PdfArrayBaseClass >(*this) != static_cast< PdfArrayBaseClass >(rhs) ); + return m_objects != rhs.m_objects; } typedef PdfArray TVariantList;
_______________________________________________ Podofo-users mailing list Podofo-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/podofo-users