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