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_STREAM_ACC_H_
8#define CORE_FPDFAPI_PARSER_CPDF_STREAM_ACC_H_
9
10#include <memory>
11
12#include "core/fpdfapi/parser/cpdf_dictionary.h"
13#include "core/fpdfapi/parser/cpdf_stream.h"
14#include "core/fxcrt/fx_string.h"
15#include "core/fxcrt/fx_system.h"
16
17class CPDF_StreamAcc {
18 public:
19  CPDF_StreamAcc();
20  ~CPDF_StreamAcc();
21
22  CPDF_StreamAcc(const CPDF_StreamAcc&) = delete;
23  CPDF_StreamAcc& operator=(const CPDF_StreamAcc&) = delete;
24
25  void LoadAllData(const CPDF_Stream* pStream,
26                   bool bRawAccess = false,
27                   uint32_t estimated_size = 0,
28                   bool bImageAcc = false);
29
30  const CPDF_Stream* GetStream() const { return m_pStream; }
31  CPDF_Dictionary* GetDict() const {
32    return m_pStream ? m_pStream->GetDict() : nullptr;
33  }
34
35  const uint8_t* GetData() const;
36  uint32_t GetSize() const;
37  const CFX_ByteString& GetImageDecoder() const { return m_ImageDecoder; }
38  const CPDF_Dictionary* GetImageParam() const { return m_pImageParam; }
39  std::unique_ptr<uint8_t, FxFreeDeleter> DetachData();
40
41 protected:
42  uint8_t* m_pData;
43  uint32_t m_dwSize;
44  bool m_bNewBuf;
45  CFX_ByteString m_ImageDecoder;
46  CPDF_Dictionary* m_pImageParam;
47  const CPDF_Stream* m_pStream;
48  uint8_t* m_pSrcData;
49};
50
51#endif  // CORE_FPDFAPI_PARSER_CPDF_STREAM_ACC_H_
52