1 // Copyright 2016 The PDFium Authors 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_LINEARIZED_HEADER_H_ 8 #define CORE_FPDFAPI_PARSER_CPDF_LINEARIZED_HEADER_H_ 9 10 #include <stdint.h> 11 12 #include <memory> 13 14 #include "core/fxcrt/fx_types.h" 15 16 class CPDF_Dictionary; 17 class CPDF_SyntaxParser; 18 19 class CPDF_LinearizedHeader { 20 public: 21 ~CPDF_LinearizedHeader(); 22 static std::unique_ptr<CPDF_LinearizedHeader> Parse( 23 CPDF_SyntaxParser* parser); 24 25 // Will only return values > 0. GetFileSize()26 FX_FILESIZE GetFileSize() const { return m_szFileSize; } GetFirstPageNo()27 uint32_t GetFirstPageNo() const { return m_dwFirstPageNo; } 28 // Will only return values > 0. GetMainXRefTableFirstEntryOffset()29 FX_FILESIZE GetMainXRefTableFirstEntryOffset() const { 30 return m_szMainXRefTableFirstEntryOffset; 31 } GetPageCount()32 uint32_t GetPageCount() const { return m_PageCount; } 33 // Will only return values > 0. GetFirstPageEndOffset()34 FX_FILESIZE GetFirstPageEndOffset() const { return m_szFirstPageEndOffset; } 35 // Will only return values in the range [1, `CPDF_Parser::kMaxObjectNumber`). GetFirstPageObjNum()36 uint32_t GetFirstPageObjNum() const { return m_FirstPageObjNum; } 37 // Will only return values > 0. GetLastXRefOffset()38 FX_FILESIZE GetLastXRefOffset() const { return m_szLastXRefOffset; } 39 40 bool HasHintTable() const; 41 // Will only return values > 0. GetHintStart()42 FX_FILESIZE GetHintStart() const { return m_szHintStart; } GetHintLength()43 uint32_t GetHintLength() const { return m_HintLength; } 44 45 protected: 46 CPDF_LinearizedHeader(const CPDF_Dictionary* pDict, 47 FX_FILESIZE szLastXRefOffset); 48 49 private: 50 const FX_FILESIZE m_szFileSize; 51 const uint32_t m_dwFirstPageNo; 52 const FX_FILESIZE m_szMainXRefTableFirstEntryOffset; 53 const uint32_t m_PageCount; 54 const FX_FILESIZE m_szFirstPageEndOffset; 55 const uint32_t m_FirstPageObjNum; 56 const FX_FILESIZE m_szLastXRefOffset; 57 FX_FILESIZE m_szHintStart = 0; 58 uint32_t m_HintLength = 0; 59 }; 60 61 #endif // CORE_FPDFAPI_PARSER_CPDF_LINEARIZED_HEADER_H_ 62