brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · ea84a36 Raw
75 lines · cpp
1//===-- DataBufferHeap.cpp ------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "lldb/Utility/DataBufferHeap.h"10 11 12using namespace lldb_private;13 14// Default constructor15DataBufferHeap::DataBufferHeap() : m_data() {}16 17// Initialize this class with "n" characters and fill the buffer with "ch".18DataBufferHeap::DataBufferHeap(lldb::offset_t n, uint8_t ch) : m_data() {19  if (n < m_data.max_size())20    m_data.assign(n, ch);21}22 23// Initialize this class with a copy of the "n" bytes from the "bytes" buffer.24DataBufferHeap::DataBufferHeap(const void *src, lldb::offset_t src_len)25    : m_data() {26  CopyData(src, src_len);27}28 29DataBufferHeap::DataBufferHeap(const DataBuffer &data_buffer) : m_data() {30  CopyData(data_buffer.GetBytes(), data_buffer.GetByteSize());31}32 33// Virtual destructor since this class inherits from a pure virtual base class.34DataBufferHeap::~DataBufferHeap() = default;35 36// Return a const pointer to the bytes owned by this object, or nullptr if the37// object contains no bytes.38const uint8_t *DataBufferHeap::GetBytesImpl() const {39  return (m_data.empty() ? nullptr : m_data.data());40}41 42// Return the number of bytes this object currently contains.43uint64_t DataBufferHeap::GetByteSize() const { return m_data.size(); }44 45// Sets the number of bytes that this object should be able to contain. This46// can be used prior to copying data into the buffer.47uint64_t DataBufferHeap::SetByteSize(uint64_t new_size) {48  if (new_size < m_data.max_size())49    m_data.resize(new_size);50  return m_data.size();51}52 53void DataBufferHeap::CopyData(const void *src, uint64_t src_len) {54  const uint8_t *src_u8 = static_cast<const uint8_t *>(src);55  if (src && src_len > 0)56    m_data.assign(src_u8, src_u8 + src_len);57  else58    m_data.clear();59}60 61void DataBufferHeap::AppendData(const void *src, uint64_t src_len) {62  m_data.insert(m_data.end(), static_cast<const uint8_t *>(src),63                static_cast<const uint8_t *>(src) + src_len);64}65 66void DataBufferHeap::Clear() {67  buffer_t empty;68  m_data.swap(empty);69}70 71char DataBuffer::ID;72char WritableDataBuffer::ID;73char DataBufferUnowned::ID;74char DataBufferHeap::ID;75