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(x: val_obj_sp); |
21 | } |
22 | |
23 | void ValueObjectList::Append(const ValueObjectList &valobj_list) { |
24 | std::copy(first: valobj_list.m_value_objects.begin(), // source begin |
25 | last: valobj_list.m_value_objects.end(), // source end |
26 | result: back_inserter(x&: 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(new_size: 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(position: 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(new_size: 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(x&: value_object_list.m_value_objects); |
103 | } |
104 |