1 // 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_FXCRT_CFX_BINARYBUF_H_ 8 #define CORE_FXCRT_CFX_BINARYBUF_H_ 9 10 #include <memory> 11 12 #include "core/fxcrt/fx_memory.h" 13 #include "core/fxcrt/fx_string.h" 14 #include "core/fxcrt/fx_system.h" 15 16 class CFX_BinaryBuf { 17 public: 18 CFX_BinaryBuf(); 19 virtual ~CFX_BinaryBuf(); 20 21 uint8_t* GetBuffer() const { return m_pBuffer.get(); } 22 size_t GetSize() const { return m_DataSize; } 23 virtual size_t GetLength() const; 24 bool IsEmpty() const { return GetLength() == 0; } 25 26 void Clear(); 27 void EstimateSize(size_t size, size_t alloc_step = 0); 28 void AppendBlock(const void* pBuf, size_t size); 29 void AppendString(const ByteString& str) { 30 AppendBlock(str.c_str(), str.GetLength()); 31 } 32 33 void AppendByte(uint8_t byte) { 34 ExpandBuf(1); 35 m_pBuffer.get()[m_DataSize++] = byte; 36 } 37 38 void Delete(size_t start_index, size_t count); 39 40 // Releases ownership of |m_pBuffer| and returns it. 41 std::unique_ptr<uint8_t, FxFreeDeleter> DetachBuffer(); 42 43 protected: 44 void ExpandBuf(size_t size); 45 46 size_t m_AllocStep; 47 size_t m_AllocSize; 48 size_t m_DataSize; 49 std::unique_ptr<uint8_t, FxFreeDeleter> m_pBuffer; 50 }; 51 52 #endif // CORE_FXCRT_CFX_BINARYBUF_H_ 53