File r1640-Use-PdfPagesTree-GetChildCount-whenever-possible.patch of Package podofo.34526

------------------------------------------------------------------------
r1640 | aja_ | 2014-06-15 19:30:42 +0200 (dom 15 de jun de 2014) | 5 líneas

ADDED: Patch by Petr Pytelka - Use PdfPagesTree::GetChildCount() whenever possible

An extension of previous Petr Pytelka's patch for "Count as reference in page tree",
with some code duplication removal.


Index: src/doc/PdfPage.cpp
===================================================================
--- src/doc/PdfPage.cpp	(revisión: 1639)
+++ src/doc/PdfPage.cpp	(revisión: 1640)
@@ -526,7 +526,10 @@
                 if( pNode->GetDictionary().GetKey( PdfName::KeyType ) != NULL 
                     && pNode->GetDictionary().GetKey( PdfName::KeyType )->GetName() == PdfName( "Pages" ) )
                 {
-                    nPageNumber += static_cast<int>(pNode->GetDictionary().GetKey( "Count" )->GetNumber());
+                    PdfObject* pCount = pNode->GetIndirectKey( "Count" );
+                    if( pCount != NULL ) {
+                        nPageNumber += static_cast<int>(pCount->GetNumber());
+                    }
                 } else {
                     // if we do not have a page tree node, 
                     // we most likely have a page object:
Index: src/doc/PdfPagesTree.cpp
===================================================================
--- src/doc/PdfPagesTree.cpp	(revisión: 1639)
+++ src/doc/PdfPagesTree.cpp	(revisión: 1640)
@@ -56,7 +56,7 @@
 
 PdfPagesTree::PdfPagesTree( PdfObject* pPagesRoot )
     : PdfElement( "Pages", pPagesRoot ),
#-      m_cache( static_cast<int>(pPagesRoot->GetDictionary().GetKeyAsLong( "Count", static_cast<pdf_int64>(PODOFO_LL_LITERAL(0)) )) )
-      m_cache( static_cast<int>(pPagesRoot->GetDictionary().GetKeyAsLong( "Count", static_cast<pdf_int64>(0LL) )) )
+      m_cache( GetChildCount( pPagesRoot ) )
 {
     if( !this->GetObject() ) 
     {
@@ -71,8 +71,7 @@
 
 int PdfPagesTree::GetTotalNumberOfPages() const
 {
#-    const PdfObject *pObject = GetObject()->GetIndirectKey( "Count" );
#-    if ( pObject != NULL ) {
#-        return (pObject->GetDataType() == ePdfDataType_Number) ?
#-                static_cast<int>( pObject->GetNumber() ) : 0;
#-    } else {
#-        return 0;
#-    }
-    return ( ( this->GetObject()->GetDictionary().HasKey( "Count" ) ) ?
-             static_cast<int>(this->GetObject()->GetDictionary().GetKeyAsLong( "Count", 0LL )) : 0 );
+    return GetChildCount( GetObject() );
 }
 
 PdfPage* PdfPagesTree::GetPage( int nIndex )
@@ -326,7 +325,7 @@
     PdfArray::const_iterator it = rKidsArray.begin();
 
     const size_t numDirectKids = rKidsArray.size();
#-    const size_t numKids = static_cast<size_t>(pParent->GetDictionary().GetKeyAsLong( "Count", PODOFO_LL_LITERAL(0) ));
-    const size_t numKids = static_cast<size_t>(pParent->GetDictionary().GetKeyAsLong( "Count", 0LL ));
+    const size_t numKids = GetChildCount(pParent);
 
     if( static_cast<int>(numKids) < nPageNum ) 
     {
@@ -374,7 +373,7 @@
 
                 if( this->IsTypePages(pChild) ) 
                 {
-                    int childCount = this->GetChildCount( pChild );
+                    int childCount = GetChildCount( pChild );
                     if( childCount < nPageNum + 1 ) // Pages are 0 based, but count is not
                     {
                         // skip this page node
@@ -493,7 +492,13 @@
     if( !pNode ) 
         return 0;
 
-    return static_cast<int>(pNode->GetDictionary().GetKeyAsLong("Count", 0L));
+    const PdfObject *pCount = pNode->GetIndirectKey( "Count" );
+    if( pCount != 0 ) {
+        return (pCount->GetDataType() == PoDoFo::ePdfDataType_Number) ?  
+            static_cast<int>( pCount->GetNumber() ):0;
+    } else {
+        return 0;
+    }
 }
 
 int PdfPagesTree::GetPosInKids( PdfObject* pPageObj, PdfObject* pPageParent )
@@ -697,7 +702,7 @@
 {
     // Increment or decrement inPagesDict's Count by inDelta, and return the new count.
     // Simply return the current count if inDelta is 0.
-    int	cnt = static_cast<int>(pPageObj->GetDictionary().GetKey( "Count" )->GetNumber());
+    int	cnt = GetChildCount( pPageObj );
     if( 0 != nDelta ) 
     {
         cnt += nDelta ;
@@ -709,7 +714,7 @@
 
 bool PdfPagesTree::IsEmptyPageNode( PdfObject* pPageNode ) 
 {
#-    long lCount = static_cast<long>(pPageNode->GetDictionary().GetKeyAsLong( PdfName("Count"), static_cast<pdf_int64>(PODOFO_LL_LITERAL(0)) ));
-    long lCount = static_cast<long>(pPageNode->GetDictionary().GetKeyAsLong( PdfName("Count"), static_cast<pdf_int64>(0LL) ));
+    long lCount = GetChildCount( pPageNode );
     bool bKidsEmpty = true;
 
     if( pPageNode->GetDictionary().HasKey( PdfName("Kids") ) )
@@ -736,7 +741,7 @@
 
     PdfArray&	kidsArray = pObj->GetArray();
     size_t	numKids   = kidsArray.size();
-    size_t      kidsCount = pPagesObject->GetDictionary().GetKeyAsLong( "Count", 0 );
+    size_t      kidsCount = GetChildCount( pPagesObject );
 
     // All parents of the page node will be added to this lists,
     // so that the PdfPage can later access inherited attributes

------------------------------------------------------------------------
openSUSE Build Service is sponsored by