Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/lldb/source/Utility/DataBufferHeap.cpp
39587 views
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-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#include "lldb/Utility/DataBufferHeap.h"
10
11
12
using namespace lldb_private;
13
14
// Default constructor
15
DataBufferHeap::DataBufferHeap() : m_data() {}
16
17
// Initialize this class with "n" characters and fill the buffer with "ch".
18
DataBufferHeap::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.
24
DataBufferHeap::DataBufferHeap(const void *src, lldb::offset_t src_len)
25
: m_data() {
26
CopyData(src, src_len);
27
}
28
29
DataBufferHeap::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.
34
DataBufferHeap::~DataBufferHeap() = default;
35
36
// Return a const pointer to the bytes owned by this object, or nullptr if the
37
// object contains no bytes.
38
const 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.
43
uint64_t DataBufferHeap::GetByteSize() const { return m_data.size(); }
44
45
// Sets the number of bytes that this object should be able to contain. This
46
// can be used prior to copying data into the buffer.
47
uint64_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
53
void 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
else
58
m_data.clear();
59
}
60
61
void 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
66
void DataBufferHeap::Clear() {
67
buffer_t empty;
68
m_data.swap(empty);
69
}
70
71
char DataBuffer::ID;
72
char WritableDataBuffer::ID;
73
char DataBufferUnowned::ID;
74
char DataBufferHeap::ID;
75
76