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 Stoneconst 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 Stonevoid 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 Stonevoid 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 Stonesize_t ValueObjectList::GetSize() const { return m_value_objects.size(); } 36dea8cb4fSGreg Clayton Resize(size_t size)37b9c1b51eSKate Stonevoid ValueObjectList::Resize(size_t size) { m_value_objects.resize(size); } 3830fdc8d8SChris Lattner GetValueObjectAtIndex(size_t idx)39b9c1b51eSKate Stonelldb::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 Stonelldb::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 Stonevoid 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 StoneValueObjectSP 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 StoneValueObjectSP 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 StoneValueObjectList::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 Stonevoid ValueObjectList::Swap(ValueObjectList &value_object_list) { 10868275d5eSGreg Clayton m_value_objects.swap(value_object_list.m_value_objects); 10968275d5eSGreg Clayton } 110