blob: 2fa163401419ba54a55ff57c13c575a3b0af15ca [file] [log] [blame]
Artem Strygine3d3ce02018-06-26 16:01:38 +00001// Copyright 2018 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#ifndef CORE_FPDFAPI_PARSER_CPDF_OBJECT_STREAM_H_
6#define CORE_FPDFAPI_PARSER_CPDF_OBJECT_STREAM_H_
7
8#include <map>
9#include <memory>
Artem Strygine3d3ce02018-06-26 16:01:38 +000010
11#include "core/fpdfapi/parser/cpdf_object.h"
12#include "core/fxcrt/retain_ptr.h"
13
14class CPDF_IndirectObjectHolder;
15class CPDF_Stream;
Artem Strygine3d3ce02018-06-26 16:01:38 +000016class IFX_SeekableReadStream;
17
18// Implementation of logic of PDF "Object Streams".
19// See "PDF 32000-1:2008" Spec. section 7.5.7.
20class CPDF_ObjectStream {
21 public:
22 static bool IsObjectsStreamObject(const CPDF_Object* object);
23
24 static std::unique_ptr<CPDF_ObjectStream> Create(const CPDF_Stream* stream);
25
26 ~CPDF_ObjectStream();
27
28 uint32_t obj_num() const { return obj_num_; }
29 uint32_t extends_obj_num() const { return extends_obj_num_; }
30
31 bool HasObject(uint32_t obj_number) const;
Tom Sepeza3097da2019-05-01 16:42:36 +000032 RetainPtr<CPDF_Object> ParseObject(CPDF_IndirectObjectHolder* pObjList,
33 uint32_t obj_number) const;
Artem Strygin2dcf20f2018-07-23 19:15:14 +000034 const std::map<uint32_t, uint32_t>& objects_offsets() const {
35 return objects_offsets_;
36 }
Artem Strygine3d3ce02018-06-26 16:01:38 +000037
38 protected:
39 explicit CPDF_ObjectStream(const CPDF_Stream* stream);
40
41 void Init(const CPDF_Stream* stream);
Tom Sepeza3097da2019-05-01 16:42:36 +000042 RetainPtr<CPDF_Object> ParseObjectAtOffset(
Artem Strygine3d3ce02018-06-26 16:01:38 +000043 CPDF_IndirectObjectHolder* pObjList,
44 uint32_t object_offset) const;
45
46 uint32_t obj_num_ = CPDF_Object::kInvalidObjNum;
47 uint32_t extends_obj_num_ = CPDF_Object::kInvalidObjNum;
Lei Zhang0389ff12019-01-24 20:26:28 +000048
Artem Strygine3d3ce02018-06-26 16:01:38 +000049 RetainPtr<IFX_SeekableReadStream> data_stream_;
50 int first_object_offset_ = 0;
51 std::map<uint32_t, uint32_t> objects_offsets_;
52};
53
54#endif // CORE_FPDFAPI_PARSER_CPDF_OBJECT_STREAM_H_