64 lines
1.8 KiB
C++
64 lines
1.8 KiB
C++
// Copyright 2017 The PDFium Authors
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
|
|
|
|
#ifndef CORE_FXCRT_BINARY_BUFFER_H_
|
|
#define CORE_FXCRT_BINARY_BUFFER_H_
|
|
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#include "core/fxcrt/bytestring.h"
|
|
#include "core/fxcrt/data_vector.h"
|
|
#include "third_party/base/span.h"
|
|
|
|
namespace fxcrt {
|
|
|
|
class BinaryBuffer {
|
|
public:
|
|
BinaryBuffer();
|
|
BinaryBuffer(BinaryBuffer&& that) noexcept;
|
|
BinaryBuffer(const BinaryBuffer& that) = delete;
|
|
virtual ~BinaryBuffer();
|
|
|
|
// Moved-from value will be left empty.
|
|
BinaryBuffer& operator=(BinaryBuffer&& that) noexcept;
|
|
|
|
BinaryBuffer& operator=(const BinaryBuffer& that) = delete;
|
|
|
|
pdfium::span<uint8_t> GetMutableSpan();
|
|
pdfium::span<const uint8_t> GetSpan() const;
|
|
bool IsEmpty() const { return GetLength() == 0; }
|
|
size_t GetSize() const { return m_DataSize; } // In bytes.
|
|
virtual size_t GetLength() const; // In subclass-specific units.
|
|
|
|
void Clear();
|
|
void SetAllocStep(size_t step) { m_AllocStep = step; }
|
|
void EstimateSize(size_t size);
|
|
void AppendSpan(pdfium::span<const uint8_t> span);
|
|
void AppendString(const ByteString& str);
|
|
void AppendUint8(uint8_t value);
|
|
void AppendUint16(uint16_t value);
|
|
void AppendUint32(uint32_t value);
|
|
void AppendDouble(double value);
|
|
|
|
// Releases ownership of `m_pBuffer` and returns it.
|
|
DataVector<uint8_t> DetachBuffer();
|
|
|
|
protected:
|
|
void ExpandBuf(size_t size);
|
|
void DeleteBuf(size_t start_index, size_t count);
|
|
|
|
size_t m_AllocStep = 0;
|
|
size_t m_DataSize = 0;
|
|
DataVector<uint8_t> m_buffer;
|
|
};
|
|
|
|
} // namespace fxcrt
|
|
|
|
using fxcrt::BinaryBuffer;
|
|
|
|
#endif // CORE_FXCRT_BINARY_BUFFER_H_
|