| //===-- DataBufferHeap.cpp --------------------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "lldb/Utility/DataBufferHeap.h" |
| |
| // C Includes |
| // C++ Includes |
| // Other libraries and framework includes |
| // Project includes |
| |
| using namespace lldb_private; |
| |
| //---------------------------------------------------------------------- |
| // Default constructor |
| //---------------------------------------------------------------------- |
| DataBufferHeap::DataBufferHeap() : m_data() {} |
| |
| //---------------------------------------------------------------------- |
| // Initialize this class with "n" characters and fill the buffer with "ch". |
| //---------------------------------------------------------------------- |
| DataBufferHeap::DataBufferHeap(lldb::offset_t n, uint8_t ch) : m_data() { |
| if (n < m_data.max_size()) |
| m_data.assign(n, ch); |
| } |
| |
| //---------------------------------------------------------------------- |
| // Initialize this class with a copy of the "n" bytes from the "bytes" buffer. |
| //---------------------------------------------------------------------- |
| DataBufferHeap::DataBufferHeap(const void *src, lldb::offset_t src_len) |
| : m_data() { |
| CopyData(src, src_len); |
| } |
| |
| //---------------------------------------------------------------------- |
| // Virtual destructor since this class inherits from a pure virtual base class. |
| //---------------------------------------------------------------------- |
| DataBufferHeap::~DataBufferHeap() = default; |
| |
| //---------------------------------------------------------------------- |
| // Return a pointer to the bytes owned by this object, or nullptr if the object |
| // contains no bytes. |
| //---------------------------------------------------------------------- |
| uint8_t *DataBufferHeap::GetBytes() { |
| return (m_data.empty() ? nullptr : m_data.data()); |
| } |
| |
| //---------------------------------------------------------------------- |
| // Return a const pointer to the bytes owned by this object, or nullptr if the |
| // object contains no bytes. |
| //---------------------------------------------------------------------- |
| const uint8_t *DataBufferHeap::GetBytes() const { |
| return (m_data.empty() ? nullptr : m_data.data()); |
| } |
| |
| //---------------------------------------------------------------------- |
| // Return the number of bytes this object currently contains. |
| //---------------------------------------------------------------------- |
| uint64_t DataBufferHeap::GetByteSize() const { return m_data.size(); } |
| |
| //---------------------------------------------------------------------- |
| // Sets the number of bytes that this object should be able to contain. This |
| // can be used prior to copying data into the buffer. |
| //---------------------------------------------------------------------- |
| uint64_t DataBufferHeap::SetByteSize(uint64_t new_size) { |
| m_data.resize(new_size); |
| return m_data.size(); |
| } |
| |
| void DataBufferHeap::CopyData(const void *src, uint64_t src_len) { |
| const uint8_t *src_u8 = (const uint8_t *)src; |
| if (src && src_len > 0) |
| m_data.assign(src_u8, src_u8 + src_len); |
| else |
| m_data.clear(); |
| } |
| |
| void DataBufferHeap::AppendData(const void *src, uint64_t src_len) { |
| m_data.insert(m_data.end(), (const uint8_t *)src, |
| (const uint8_t *)src + src_len); |
| } |
| |
| void DataBufferHeap::Clear() { |
| buffer_t empty; |
| m_data.swap(empty); |
| } |