blob: 8fb91954c36a4bfcc6cc7806fde18fd36383a366 [file] [log] [blame]
Tom Sepez5fc239a2016-03-10 14:10:38 -08001// 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
dsinclairc6c425a2016-09-29 12:01:30 -07007#ifndef CORE_FPDFAPI_FPDF_PARSER_CPDF_INDIRECT_OBJECT_HOLDER_H_
8#define CORE_FPDFAPI_FPDF_PARSER_CPDF_INDIRECT_OBJECT_HOLDER_H_
Tom Sepez5fc239a2016-03-10 14:10:38 -08009
10#include <map>
tsepez5b7c9bb2016-09-20 12:02:32 -070011#include <memory>
Tom Sepez5fc239a2016-03-10 14:10:38 -080012
dsinclaira52ab742016-09-29 13:59:29 -070013#include "core/fxcrt/fx_system.h"
Tom Sepez5fc239a2016-03-10 14:10:38 -080014
15class CPDF_Object;
Tom Sepez5fc239a2016-03-10 14:10:38 -080016
17class CPDF_IndirectObjectHolder {
18 public:
tsepez5b7c9bb2016-09-20 12:02:32 -070019 using const_iterator =
20 std::map<uint32_t, std::unique_ptr<CPDF_Object>>::const_iterator;
Tom Sepez5fc239a2016-03-10 14:10:38 -080021
dsinclaira61c01e2016-08-24 10:31:23 -070022 CPDF_IndirectObjectHolder();
23 virtual ~CPDF_IndirectObjectHolder();
Tom Sepez5fc239a2016-03-10 14:10:38 -080024
dsinclaire07edce2016-08-23 20:14:27 -070025 CPDF_Object* GetIndirectObject(uint32_t objnum) const;
dsinclair03bd7c72016-08-23 20:13:41 -070026 CPDF_Object* GetOrParseIndirectObject(uint32_t objnum);
tsepezb5e8f142016-03-25 15:18:35 -070027 void ReleaseIndirectObject(uint32_t objnum);
Tom Sepez5fc239a2016-03-10 14:10:38 -080028
dsinclair03bd7c72016-08-23 20:13:41 -070029 // Take ownership of |pObj|.
30 uint32_t AddIndirectObject(CPDF_Object* pObj);
31 bool ReplaceIndirectObjectIfHigherGeneration(uint32_t objnum,
32 CPDF_Object* pObj);
Tom Sepez5fc239a2016-03-10 14:10:38 -080033
tsepezb5e8f142016-03-25 15:18:35 -070034 uint32_t GetLastObjNum() const { return m_LastObjNum; }
dsinclair03bd7c72016-08-23 20:13:41 -070035 void SetLastObjNum(uint32_t objnum) { m_LastObjNum = objnum; }
36
Tom Sepez5fc239a2016-03-10 14:10:38 -080037 const_iterator begin() const { return m_IndirectObjs.begin(); }
Tom Sepez5fc239a2016-03-10 14:10:38 -080038 const_iterator end() const { return m_IndirectObjs.end(); }
39
40 protected:
dsinclaira61c01e2016-08-24 10:31:23 -070041 virtual CPDF_Object* ParseIndirectObject(uint32_t objnum);
dsinclair03bd7c72016-08-23 20:13:41 -070042
43 private:
44 uint32_t m_LastObjNum;
tsepez5b7c9bb2016-09-20 12:02:32 -070045 std::map<uint32_t, std::unique_ptr<CPDF_Object>> m_IndirectObjs;
Tom Sepez5fc239a2016-03-10 14:10:38 -080046};
47
dsinclairc6c425a2016-09-29 12:01:30 -070048#endif // CORE_FPDFAPI_FPDF_PARSER_CPDF_INDIRECT_OBJECT_HOLDER_H_