1 //===-- DataBufferHeap.cpp --------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "lldb/Utility/DataBufferHeap.h"
14 // Other libraries and framework includes
17 using namespace lldb_private;
19 //----------------------------------------------------------------------
20 // Default constructor
21 //----------------------------------------------------------------------
22 DataBufferHeap::DataBufferHeap() : m_data() {}
24 //----------------------------------------------------------------------
25 // Initialize this class with "n" characters and fill the buffer with "ch".
26 //----------------------------------------------------------------------
27 DataBufferHeap::DataBufferHeap(lldb::offset_t n, uint8_t ch) : m_data() {
28 if (n < m_data.max_size())
32 //----------------------------------------------------------------------
33 // Initialize this class with a copy of the "n" bytes from the "bytes" buffer.
34 //----------------------------------------------------------------------
35 DataBufferHeap::DataBufferHeap(const void *src, lldb::offset_t src_len)
37 CopyData(src, src_len);
40 //----------------------------------------------------------------------
41 // Virtual destructor since this class inherits from a pure virtual base class.
42 //----------------------------------------------------------------------
43 DataBufferHeap::~DataBufferHeap() = default;
45 //----------------------------------------------------------------------
46 // Return a pointer to the bytes owned by this object, or nullptr if the object
48 //----------------------------------------------------------------------
49 uint8_t *DataBufferHeap::GetBytes() {
50 return (m_data.empty() ? nullptr : m_data.data());
53 //----------------------------------------------------------------------
54 // Return a const pointer to the bytes owned by this object, or nullptr if the
55 // object contains no bytes.
56 //----------------------------------------------------------------------
57 const uint8_t *DataBufferHeap::GetBytes() const {
58 return (m_data.empty() ? nullptr : m_data.data());
61 //----------------------------------------------------------------------
62 // Return the number of bytes this object currently contains.
63 //----------------------------------------------------------------------
64 uint64_t DataBufferHeap::GetByteSize() const { return m_data.size(); }
66 //----------------------------------------------------------------------
67 // Sets the number of bytes that this object should be able to contain. This
68 // can be used prior to copying data into the buffer.
69 //----------------------------------------------------------------------
70 uint64_t DataBufferHeap::SetByteSize(uint64_t new_size) {
71 m_data.resize(new_size);
75 void DataBufferHeap::CopyData(const void *src, uint64_t src_len) {
76 const uint8_t *src_u8 = (const uint8_t *)src;
77 if (src && src_len > 0)
78 m_data.assign(src_u8, src_u8 + src_len);
83 void DataBufferHeap::AppendData(const void *src, uint64_t src_len) {
84 m_data.insert(m_data.end(), (const uint8_t *)src,
85 (const uint8_t *)src + src_len);
88 void DataBufferHeap::Clear() {