Remove void* ctor from CPDF_Number.
authorDan Sinclair <dsinclair@chromium.org>
Wed, 21 Oct 2015 12:57:40 +0000 (08:57 -0400)
committerDan Sinclair <dsinclair@chromium.org>
Wed, 21 Oct 2015 12:57:40 +0000 (08:57 -0400)
This Removes the ctor that took a pointer to the data to store and copied it
into the union memory. Instead, the call sites look at the type and pass the
correct value.

R=tsepez@chromium.org

Review URL: https://codereview.chromium.org/1422473002 .

core/include/fpdfapi/fpdf_objects.h
core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp
core/src/fpdfapi/fpdf_parser/fpdf_parser_objects.cpp

index a52132f..0df8be7 100644 (file)
@@ -138,13 +138,7 @@ class CPDF_Number : public CPDF_Object {
     return new CPDF_Number(str);
   }
 
-  static CPDF_Number* Create(FX_BOOL bInteger, void* pData) {
-    return new CPDF_Number(bInteger, pData);
-  }
-
-  CPDF_Number() : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(false), m_Integer(0) {}
-
-  CPDF_Number(FX_BOOL bInteger, void* pData);
+  CPDF_Number() : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(TRUE), m_Integer(0) {}
 
   CPDF_Number(int value);
 
index ffa5e62..1283a3a 100644 (file)
@@ -163,8 +163,10 @@ CPDF_Object* CPDF_StreamContentParser::GetObject(FX_DWORD index) {
   }
   _ContentParam& param = m_ParamBuf1[real_index];
   if (param.m_Type == PDFOBJ_NUMBER) {
-    CPDF_Number* pNumber = CPDF_Number::Create(param.m_Number.m_bInteger,
-                                               &param.m_Number.m_Integer);
+    CPDF_Number* pNumber = param.m_Number.m_bInteger
+                               ? CPDF_Number::Create(param.m_Number.m_Integer)
+                               : CPDF_Number::Create(param.m_Number.m_Float);
+
     param.m_Type = 0;
     param.m_pObject = pNumber;
     return pNumber;
index 2755493..e824791 100644 (file)
@@ -247,8 +247,9 @@ CPDF_Object* CPDF_Object::CloneInternal(FX_BOOL bDirect,
     case PDFOBJ_BOOLEAN:
       return new CPDF_Boolean(this->AsBoolean()->m_bValue);
     case PDFOBJ_NUMBER:
-      return new CPDF_Number(((CPDF_Number*)this)->m_bInteger,
-                             &((CPDF_Number*)this)->m_Integer);
+      if (((CPDF_Number*)this)->m_bInteger)
+        return new CPDF_Number(((CPDF_Number*)this)->m_Integer);
+      return new CPDF_Number(((CPDF_Number*)this)->m_Float);
     case PDFOBJ_STRING:
       return new CPDF_String(((CPDF_String*)this)->m_String,
                              ((CPDF_String*)this)->IsHex());
@@ -359,11 +360,6 @@ CPDF_Number::CPDF_Number(int value)
 CPDF_Number::CPDF_Number(FX_FLOAT value)
     : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(FALSE), m_Float(value) {}
 
-CPDF_Number::CPDF_Number(FX_BOOL bInteger, void* pData)
-    : CPDF_Object(PDFOBJ_NUMBER),
-      m_bInteger(bInteger),
-      m_Integer(*(int*)pData) {}
-
 CPDF_Number::CPDF_Number(const CFX_ByteStringC& str)
     : CPDF_Object(PDFOBJ_NUMBER) {
   FX_atonum(str, m_bInteger, &m_Integer);