blob: 14ca7cec1670b896751568a01ac421a0e0206a0f [file] [log] [blame]
Dan Sinclaira0b19542017-05-09 12:36:08 -04001// Copyright 2017 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_EDIT_CPDF_FLATEENCODER_H_
8#define CORE_FPDFAPI_EDIT_CPDF_FLATEENCODER_H_
9
Lei Zhang81981302018-05-09 21:28:32 +000010#include <memory>
11
Dan Sinclaira0b19542017-05-09 12:36:08 -040012#include "core/fpdfapi/parser/cpdf_dictionary.h"
13#include "core/fpdfapi/parser/cpdf_stream_acc.h"
Dan Sinclaira0b19542017-05-09 12:36:08 -040014#include "core/fxcrt/fx_memory.h"
Dan Sinclairde44d152017-09-21 14:52:41 -040015#include "core/fxcrt/maybe_owned.h"
Dan Sinclair0b950422017-09-21 15:49:49 -040016#include "core/fxcrt/retain_ptr.h"
Tom Sepez6facd152018-05-16 17:07:02 +000017#include "third_party/base/span.h"
Dan Sinclaira0b19542017-05-09 12:36:08 -040018
19class CPDF_Stream;
20
21class CPDF_FlateEncoder {
22 public:
Lei Zhang4a8478e2018-04-05 19:08:20 +000023 CPDF_FlateEncoder(const CPDF_Stream* pStream, bool bFlateEncode);
Dan Sinclaira0b19542017-05-09 12:36:08 -040024 ~CPDF_FlateEncoder();
25
26 void CloneDict();
Lei Zhang81981302018-05-09 21:28:32 +000027 CPDF_Dictionary* GetClonedDict();
28
29 // Returns |m_pClonedDict| if it is valid. Otherwise returns |m_pDict|.
30 const CPDF_Dictionary* GetDict() const;
Dan Sinclaira0b19542017-05-09 12:36:08 -040031
Tom Sepez6facd152018-05-16 17:07:02 +000032 pdfium::span<const uint8_t> GetSpan() const {
33 return pdfium::make_span(m_pData.Get(), m_dwSize);
34 }
Dan Sinclaira0b19542017-05-09 12:36:08 -040035
Dan Sinclaira0b19542017-05-09 12:36:08 -040036 private:
Artem Strygin68d04f22018-07-12 09:18:19 +000037 RetainPtr<CPDF_StreamAcc> m_pAcc;
38
Dan Sinclaira0b19542017-05-09 12:36:08 -040039 uint32_t m_dwSize;
Dan Sinclairde44d152017-09-21 14:52:41 -040040 MaybeOwned<uint8_t, FxFreeDeleter> m_pData;
Lei Zhang81981302018-05-09 21:28:32 +000041
42 // Only one of these two pointers is valid at any time.
43 UnownedPtr<const CPDF_Dictionary> m_pDict;
44 std::unique_ptr<CPDF_Dictionary> m_pClonedDict;
Dan Sinclaira0b19542017-05-09 12:36:08 -040045};
46
47#endif // CORE_FPDFAPI_EDIT_CPDF_FLATEENCODER_H_