1*80814287SRaphael Isemann //===-- ValueObjectList.cpp -----------------------------------------------===//
230fdc8d8SChris Lattner //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
630fdc8d8SChris Lattner //
730fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
830fdc8d8SChris Lattner 
930fdc8d8SChris Lattner #include "lldb/Core/ValueObjectList.h"
1030fdc8d8SChris Lattner 
11672d2c12SJonas Devlieghere #include "lldb/Core/ValueObject.h"
12672d2c12SJonas Devlieghere #include "lldb/Utility/ConstString.h"
132f3df613SZachary Turner 
14672d2c12SJonas Devlieghere #include <utility>
1530fdc8d8SChris Lattner 
1630fdc8d8SChris Lattner using namespace lldb;
1730fdc8d8SChris Lattner using namespace lldb_private;
1830fdc8d8SChris Lattner 
operator =(const ValueObjectList & rhs)19b9c1b51eSKate Stone const ValueObjectList &ValueObjectList::operator=(const ValueObjectList &rhs) {
2030fdc8d8SChris Lattner   if (this != &rhs)
2130fdc8d8SChris Lattner     m_value_objects = rhs.m_value_objects;
2230fdc8d8SChris Lattner   return *this;
2330fdc8d8SChris Lattner }
2430fdc8d8SChris Lattner 
Append(const ValueObjectSP & val_obj_sp)25b9c1b51eSKate Stone void ValueObjectList::Append(const ValueObjectSP &val_obj_sp) {
2630fdc8d8SChris Lattner   m_value_objects.push_back(val_obj_sp);
2730fdc8d8SChris Lattner }
2830fdc8d8SChris Lattner 
Append(const ValueObjectList & valobj_list)29b9c1b51eSKate Stone void ValueObjectList::Append(const ValueObjectList &valobj_list) {
30dea8cb4fSGreg Clayton   std::copy(valobj_list.m_value_objects.begin(), // source begin
31dea8cb4fSGreg Clayton             valobj_list.m_value_objects.end(),   // source end
32dea8cb4fSGreg Clayton             back_inserter(m_value_objects));     // destination
33dea8cb4fSGreg Clayton }
34dea8cb4fSGreg Clayton 
GetSize() const35b9c1b51eSKate Stone size_t ValueObjectList::GetSize() const { return m_value_objects.size(); }
36dea8cb4fSGreg Clayton 
Resize(size_t size)37b9c1b51eSKate Stone void ValueObjectList::Resize(size_t size) { m_value_objects.resize(size); }
3830fdc8d8SChris Lattner 
GetValueObjectAtIndex(size_t idx)39b9c1b51eSKate Stone lldb::ValueObjectSP ValueObjectList::GetValueObjectAtIndex(size_t idx) {
4030fdc8d8SChris Lattner   lldb::ValueObjectSP valobj_sp;
4130fdc8d8SChris Lattner   if (idx < m_value_objects.size())
4230fdc8d8SChris Lattner     valobj_sp = m_value_objects[idx];
4330fdc8d8SChris Lattner   return valobj_sp;
4430fdc8d8SChris Lattner }
4530fdc8d8SChris Lattner 
RemoveValueObjectAtIndex(size_t idx)46b9c1b51eSKate Stone lldb::ValueObjectSP ValueObjectList::RemoveValueObjectAtIndex(size_t idx) {
47884fb694SGreg Clayton   lldb::ValueObjectSP valobj_sp;
48b9c1b51eSKate Stone   if (idx < m_value_objects.size()) {
49884fb694SGreg Clayton     valobj_sp = m_value_objects[idx];
50884fb694SGreg Clayton     m_value_objects.erase(m_value_objects.begin() + idx);
51884fb694SGreg Clayton   }
52884fb694SGreg Clayton   return valobj_sp;
53884fb694SGreg Clayton }
54884fb694SGreg Clayton 
SetValueObjectAtIndex(size_t idx,const ValueObjectSP & valobj_sp)55b9c1b51eSKate Stone void ValueObjectList::SetValueObjectAtIndex(size_t idx,
56b9c1b51eSKate Stone                                             const ValueObjectSP &valobj_sp) {
57288bdf9cSGreg Clayton   if (idx >= m_value_objects.size())
58288bdf9cSGreg Clayton     m_value_objects.resize(idx + 1);
59288bdf9cSGreg Clayton   m_value_objects[idx] = valobj_sp;
60288bdf9cSGreg Clayton }
61288bdf9cSGreg Clayton 
FindValueObjectByValueName(const char * name)62b9c1b51eSKate Stone ValueObjectSP ValueObjectList::FindValueObjectByValueName(const char *name) {
6330fdc8d8SChris Lattner   ConstString name_const_str(name);
6430fdc8d8SChris Lattner   ValueObjectSP val_obj_sp;
6530fdc8d8SChris Lattner   collection::iterator pos, end = m_value_objects.end();
66b9c1b51eSKate Stone   for (pos = m_value_objects.begin(); pos != end; ++pos) {
67288bdf9cSGreg Clayton     ValueObject *valobj = (*pos).get();
68b9c1b51eSKate Stone     if (valobj && valobj->GetName() == name_const_str) {
6930fdc8d8SChris Lattner       val_obj_sp = *pos;
7030fdc8d8SChris Lattner       break;
7130fdc8d8SChris Lattner     }
7230fdc8d8SChris Lattner   }
7330fdc8d8SChris Lattner   return val_obj_sp;
7430fdc8d8SChris Lattner }
7530fdc8d8SChris Lattner 
FindValueObjectByUID(lldb::user_id_t uid)76b9c1b51eSKate Stone ValueObjectSP ValueObjectList::FindValueObjectByUID(lldb::user_id_t uid) {
7730fdc8d8SChris Lattner   ValueObjectSP valobj_sp;
7830fdc8d8SChris Lattner   collection::iterator pos, end = m_value_objects.end();
7930fdc8d8SChris Lattner 
80b9c1b51eSKate Stone   for (pos = m_value_objects.begin(); pos != end; ++pos) {
8105097246SAdrian Prantl     // Watch out for NULL objects in our list as the list might get resized to
8205097246SAdrian Prantl     // a specific size and lazily filled in
83288bdf9cSGreg Clayton     ValueObject *valobj = (*pos).get();
84b9c1b51eSKate Stone     if (valobj && valobj->GetID() == uid) {
8530fdc8d8SChris Lattner       valobj_sp = *pos;
8630fdc8d8SChris Lattner       break;
8730fdc8d8SChris Lattner     }
8830fdc8d8SChris Lattner   }
8930fdc8d8SChris Lattner   return valobj_sp;
9030fdc8d8SChris Lattner }
9130fdc8d8SChris Lattner 
9230fdc8d8SChris Lattner ValueObjectSP
FindValueObjectByPointer(ValueObject * find_valobj)93b9c1b51eSKate Stone ValueObjectList::FindValueObjectByPointer(ValueObject *find_valobj) {
9430fdc8d8SChris Lattner   ValueObjectSP valobj_sp;
9530fdc8d8SChris Lattner   collection::iterator pos, end = m_value_objects.end();
9630fdc8d8SChris Lattner 
97b9c1b51eSKate Stone   for (pos = m_value_objects.begin(); pos != end; ++pos) {
98288bdf9cSGreg Clayton     ValueObject *valobj = (*pos).get();
99b9c1b51eSKate Stone     if (valobj && valobj == find_valobj) {
10030fdc8d8SChris Lattner       valobj_sp = *pos;
10130fdc8d8SChris Lattner       break;
10230fdc8d8SChris Lattner     }
10330fdc8d8SChris Lattner   }
10430fdc8d8SChris Lattner   return valobj_sp;
10530fdc8d8SChris Lattner }
10668275d5eSGreg Clayton 
Swap(ValueObjectList & value_object_list)107b9c1b51eSKate Stone void ValueObjectList::Swap(ValueObjectList &value_object_list) {
10868275d5eSGreg Clayton   m_value_objects.swap(value_object_list.m_value_objects);
10968275d5eSGreg Clayton }
110