xref: /llvm-project/lldb/source/ValueObject/ValueObjectList.cpp (revision b852fb1ec5fa15f0b913cc4988cbd09239b19904)
1*b852fb1eSJonas Devlieghere //===-- ValueObjectList.cpp -----------------------------------------------===//
2*b852fb1eSJonas Devlieghere //
3*b852fb1eSJonas Devlieghere // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*b852fb1eSJonas Devlieghere // See https://llvm.org/LICENSE.txt for license information.
5*b852fb1eSJonas Devlieghere // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*b852fb1eSJonas Devlieghere //
7*b852fb1eSJonas Devlieghere //===----------------------------------------------------------------------===//
8*b852fb1eSJonas Devlieghere 
9*b852fb1eSJonas Devlieghere #include "lldb/ValueObject/ValueObjectList.h"
10*b852fb1eSJonas Devlieghere 
11*b852fb1eSJonas Devlieghere #include "lldb/Utility/ConstString.h"
12*b852fb1eSJonas Devlieghere #include "lldb/ValueObject/ValueObject.h"
13*b852fb1eSJonas Devlieghere 
14*b852fb1eSJonas Devlieghere #include <utility>
15*b852fb1eSJonas Devlieghere 
16*b852fb1eSJonas Devlieghere using namespace lldb;
17*b852fb1eSJonas Devlieghere using namespace lldb_private;
18*b852fb1eSJonas Devlieghere 
19*b852fb1eSJonas Devlieghere const ValueObjectList &ValueObjectList::operator=(const ValueObjectList &rhs) {
20*b852fb1eSJonas Devlieghere   if (this != &rhs)
21*b852fb1eSJonas Devlieghere     m_value_objects = rhs.m_value_objects;
22*b852fb1eSJonas Devlieghere   return *this;
23*b852fb1eSJonas Devlieghere }
24*b852fb1eSJonas Devlieghere 
25*b852fb1eSJonas Devlieghere void ValueObjectList::Append(const ValueObjectSP &val_obj_sp) {
26*b852fb1eSJonas Devlieghere   m_value_objects.push_back(val_obj_sp);
27*b852fb1eSJonas Devlieghere }
28*b852fb1eSJonas Devlieghere 
29*b852fb1eSJonas Devlieghere void ValueObjectList::Append(const ValueObjectList &valobj_list) {
30*b852fb1eSJonas Devlieghere   std::copy(valobj_list.m_value_objects.begin(), // source begin
31*b852fb1eSJonas Devlieghere             valobj_list.m_value_objects.end(),   // source end
32*b852fb1eSJonas Devlieghere             back_inserter(m_value_objects));     // destination
33*b852fb1eSJonas Devlieghere }
34*b852fb1eSJonas Devlieghere 
35*b852fb1eSJonas Devlieghere size_t ValueObjectList::GetSize() const { return m_value_objects.size(); }
36*b852fb1eSJonas Devlieghere 
37*b852fb1eSJonas Devlieghere void ValueObjectList::Resize(size_t size) { m_value_objects.resize(size); }
38*b852fb1eSJonas Devlieghere 
39*b852fb1eSJonas Devlieghere lldb::ValueObjectSP ValueObjectList::GetValueObjectAtIndex(size_t idx) {
40*b852fb1eSJonas Devlieghere   lldb::ValueObjectSP valobj_sp;
41*b852fb1eSJonas Devlieghere   if (idx < m_value_objects.size())
42*b852fb1eSJonas Devlieghere     valobj_sp = m_value_objects[idx];
43*b852fb1eSJonas Devlieghere   return valobj_sp;
44*b852fb1eSJonas Devlieghere }
45*b852fb1eSJonas Devlieghere 
46*b852fb1eSJonas Devlieghere lldb::ValueObjectSP ValueObjectList::RemoveValueObjectAtIndex(size_t idx) {
47*b852fb1eSJonas Devlieghere   lldb::ValueObjectSP valobj_sp;
48*b852fb1eSJonas Devlieghere   if (idx < m_value_objects.size()) {
49*b852fb1eSJonas Devlieghere     valobj_sp = m_value_objects[idx];
50*b852fb1eSJonas Devlieghere     m_value_objects.erase(m_value_objects.begin() + idx);
51*b852fb1eSJonas Devlieghere   }
52*b852fb1eSJonas Devlieghere   return valobj_sp;
53*b852fb1eSJonas Devlieghere }
54*b852fb1eSJonas Devlieghere 
55*b852fb1eSJonas Devlieghere void ValueObjectList::SetValueObjectAtIndex(size_t idx,
56*b852fb1eSJonas Devlieghere                                             const ValueObjectSP &valobj_sp) {
57*b852fb1eSJonas Devlieghere   if (idx >= m_value_objects.size())
58*b852fb1eSJonas Devlieghere     m_value_objects.resize(idx + 1);
59*b852fb1eSJonas Devlieghere   m_value_objects[idx] = valobj_sp;
60*b852fb1eSJonas Devlieghere }
61*b852fb1eSJonas Devlieghere 
62*b852fb1eSJonas Devlieghere ValueObjectSP ValueObjectList::FindValueObjectByValueName(const char *name) {
63*b852fb1eSJonas Devlieghere   ConstString name_const_str(name);
64*b852fb1eSJonas Devlieghere   ValueObjectSP val_obj_sp;
65*b852fb1eSJonas Devlieghere   collection::iterator pos, end = m_value_objects.end();
66*b852fb1eSJonas Devlieghere   for (pos = m_value_objects.begin(); pos != end; ++pos) {
67*b852fb1eSJonas Devlieghere     ValueObject *valobj = (*pos).get();
68*b852fb1eSJonas Devlieghere     if (valobj && valobj->GetName() == name_const_str) {
69*b852fb1eSJonas Devlieghere       val_obj_sp = *pos;
70*b852fb1eSJonas Devlieghere       break;
71*b852fb1eSJonas Devlieghere     }
72*b852fb1eSJonas Devlieghere   }
73*b852fb1eSJonas Devlieghere   return val_obj_sp;
74*b852fb1eSJonas Devlieghere }
75*b852fb1eSJonas Devlieghere 
76*b852fb1eSJonas Devlieghere ValueObjectSP ValueObjectList::FindValueObjectByUID(lldb::user_id_t uid) {
77*b852fb1eSJonas Devlieghere   ValueObjectSP valobj_sp;
78*b852fb1eSJonas Devlieghere   collection::iterator pos, end = m_value_objects.end();
79*b852fb1eSJonas Devlieghere 
80*b852fb1eSJonas Devlieghere   for (pos = m_value_objects.begin(); pos != end; ++pos) {
81*b852fb1eSJonas Devlieghere     // Watch out for NULL objects in our list as the list might get resized to
82*b852fb1eSJonas Devlieghere     // a specific size and lazily filled in
83*b852fb1eSJonas Devlieghere     ValueObject *valobj = (*pos).get();
84*b852fb1eSJonas Devlieghere     if (valobj && valobj->GetID() == uid) {
85*b852fb1eSJonas Devlieghere       valobj_sp = *pos;
86*b852fb1eSJonas Devlieghere       break;
87*b852fb1eSJonas Devlieghere     }
88*b852fb1eSJonas Devlieghere   }
89*b852fb1eSJonas Devlieghere   return valobj_sp;
90*b852fb1eSJonas Devlieghere }
91*b852fb1eSJonas Devlieghere 
92*b852fb1eSJonas Devlieghere ValueObjectSP
93*b852fb1eSJonas Devlieghere ValueObjectList::FindValueObjectByPointer(ValueObject *find_valobj) {
94*b852fb1eSJonas Devlieghere   ValueObjectSP valobj_sp;
95*b852fb1eSJonas Devlieghere   collection::iterator pos, end = m_value_objects.end();
96*b852fb1eSJonas Devlieghere 
97*b852fb1eSJonas Devlieghere   for (pos = m_value_objects.begin(); pos != end; ++pos) {
98*b852fb1eSJonas Devlieghere     ValueObject *valobj = (*pos).get();
99*b852fb1eSJonas Devlieghere     if (valobj && valobj == find_valobj) {
100*b852fb1eSJonas Devlieghere       valobj_sp = *pos;
101*b852fb1eSJonas Devlieghere       break;
102*b852fb1eSJonas Devlieghere     }
103*b852fb1eSJonas Devlieghere   }
104*b852fb1eSJonas Devlieghere   return valobj_sp;
105*b852fb1eSJonas Devlieghere }
106*b852fb1eSJonas Devlieghere 
107*b852fb1eSJonas Devlieghere void ValueObjectList::Swap(ValueObjectList &value_object_list) {
108*b852fb1eSJonas Devlieghere   m_value_objects.swap(value_object_list.m_value_objects);
109*b852fb1eSJonas Devlieghere }
110