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