1 // Copyright 2016 PDFium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef CORE_FPDFAPI_PARSER_CPDF_NUMBER_H_ 8 #define CORE_FPDFAPI_PARSER_CPDF_NUMBER_H_ 9 10 #include <memory> 11 12 #include "core/fpdfapi/parser/cpdf_object.h" 13 #include "core/fxcrt/fx_number.h" 14 #include "core/fxcrt/fx_string.h" 15 #include "core/fxcrt/fx_system.h" 16 17 class CPDF_Number final : public CPDF_Object { 18 public: 19 template <typename T, typename... Args> 20 friend RetainPtr<T> pdfium::MakeRetain(Args&&... args); 21 22 // CPDF_Object: 23 Type GetType() const override; 24 RetainPtr<CPDF_Object> Clone() const override; 25 ByteString GetString() const override; 26 float GetNumber() const override; 27 int GetInteger() const override; 28 void SetString(const ByteString& str) override; 29 bool IsNumber() const override; 30 CPDF_Number* AsNumber() override; 31 const CPDF_Number* AsNumber() const override; 32 bool WriteTo(IFX_ArchiveStream* archive, 33 const CPDF_Encryptor* encryptor) const override; 34 IsInteger()35 bool IsInteger() const { return m_Number.IsInteger(); } 36 37 private: 38 CPDF_Number(); 39 explicit CPDF_Number(int value); 40 explicit CPDF_Number(float value); 41 explicit CPDF_Number(ByteStringView str); 42 ~CPDF_Number() override; 43 44 FX_Number m_Number; 45 }; 46 ToNumber(CPDF_Object * obj)47inline CPDF_Number* ToNumber(CPDF_Object* obj) { 48 return obj ? obj->AsNumber() : nullptr; 49 } 50 ToNumber(const CPDF_Object * obj)51inline const CPDF_Number* ToNumber(const CPDF_Object* obj) { 52 return obj ? obj->AsNumber() : nullptr; 53 } 54 55 #endif // CORE_FPDFAPI_PARSER_CPDF_NUMBER_H_ 56