From: Francesco Pretto <[email protected]>
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/podofo-users