Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/lldb/source/ValueObject/ValueObjectList.cpp
213764 views
1
//===-- ValueObjectList.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/ValueObject/ValueObjectList.h"
10
11
#include "lldb/Utility/ConstString.h"
12
#include "lldb/ValueObject/ValueObject.h"
13
14
#include <utility>
15
16
using namespace lldb;
17
using namespace lldb_private;
18
19
void ValueObjectList::Append(const ValueObjectSP &val_obj_sp) {
20
m_value_objects.push_back(val_obj_sp);
21
}
22
23
void ValueObjectList::Append(const ValueObjectList &valobj_list) {
24
std::copy(valobj_list.m_value_objects.begin(), // source begin
25
valobj_list.m_value_objects.end(), // source end
26
back_inserter(m_value_objects)); // destination
27
}
28
29
size_t ValueObjectList::GetSize() const { return m_value_objects.size(); }
30
31
void ValueObjectList::Resize(size_t size) { m_value_objects.resize(size); }
32
33
lldb::ValueObjectSP ValueObjectList::GetValueObjectAtIndex(size_t idx) {
34
lldb::ValueObjectSP valobj_sp;
35
if (idx < m_value_objects.size())
36
valobj_sp = m_value_objects[idx];
37
return valobj_sp;
38
}
39
40
lldb::ValueObjectSP ValueObjectList::RemoveValueObjectAtIndex(size_t idx) {
41
lldb::ValueObjectSP valobj_sp;
42
if (idx < m_value_objects.size()) {
43
valobj_sp = m_value_objects[idx];
44
m_value_objects.erase(m_value_objects.begin() + idx);
45
}
46
return valobj_sp;
47
}
48
49
void ValueObjectList::SetValueObjectAtIndex(size_t idx,
50
const ValueObjectSP &valobj_sp) {
51
if (idx >= m_value_objects.size())
52
m_value_objects.resize(idx + 1);
53
m_value_objects[idx] = valobj_sp;
54
}
55
56
ValueObjectSP ValueObjectList::FindValueObjectByValueName(const char *name) {
57
ConstString name_const_str(name);
58
ValueObjectSP val_obj_sp;
59
collection::iterator pos, end = m_value_objects.end();
60
for (pos = m_value_objects.begin(); pos != end; ++pos) {
61
ValueObject *valobj = (*pos).get();
62
if (valobj && valobj->GetName() == name_const_str) {
63
val_obj_sp = *pos;
64
break;
65
}
66
}
67
return val_obj_sp;
68
}
69
70
ValueObjectSP ValueObjectList::FindValueObjectByUID(lldb::user_id_t uid) {
71
ValueObjectSP valobj_sp;
72
collection::iterator pos, end = m_value_objects.end();
73
74
for (pos = m_value_objects.begin(); pos != end; ++pos) {
75
// Watch out for NULL objects in our list as the list might get resized to
76
// a specific size and lazily filled in
77
ValueObject *valobj = (*pos).get();
78
if (valobj && valobj->GetID() == uid) {
79
valobj_sp = *pos;
80
break;
81
}
82
}
83
return valobj_sp;
84
}
85
86
ValueObjectSP
87
ValueObjectList::FindValueObjectByPointer(ValueObject *find_valobj) {
88
ValueObjectSP valobj_sp;
89
collection::iterator pos, end = m_value_objects.end();
90
91
for (pos = m_value_objects.begin(); pos != end; ++pos) {
92
ValueObject *valobj = (*pos).get();
93
if (valobj && valobj == find_valobj) {
94
valobj_sp = *pos;
95
break;
96
}
97
}
98
return valobj_sp;
99
}
100
101
void ValueObjectList::Swap(ValueObjectList &value_object_list) {
102
m_value_objects.swap(value_object_list.m_value_objects);
103
}
104
105