104 lines · cpp
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-exception6//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 16using namespace lldb;17using namespace lldb_private;18 19void ValueObjectList::Append(const ValueObjectSP &val_obj_sp) {20 m_value_objects.push_back(val_obj_sp);21}22 23void ValueObjectList::Append(const ValueObjectList &valobj_list) {24 std::copy(valobj_list.m_value_objects.begin(), // source begin25 valobj_list.m_value_objects.end(), // source end26 back_inserter(m_value_objects)); // destination27}28 29size_t ValueObjectList::GetSize() const { return m_value_objects.size(); }30 31void ValueObjectList::Resize(size_t size) { m_value_objects.resize(size); }32 33lldb::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 40lldb::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(m_value_objects.begin() + idx);45 }46 return valobj_sp;47}48 49void ValueObjectList::SetValueObjectAtIndex(size_t idx,50 const ValueObjectSP &valobj_sp) {51 if (idx >= m_value_objects.size())52 m_value_objects.resize(idx + 1);53 m_value_objects[idx] = valobj_sp;54}55 56ValueObjectSP 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 70ValueObjectSP 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 to76 // a specific size and lazily filled in77 ValueObject *valobj = (*pos).get();78 if (valobj && valobj->GetID() == uid) {79 valobj_sp = *pos;80 break;81 }82 }83 return valobj_sp;84}85 86ValueObjectSP87ValueObjectList::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 101void ValueObjectList::Swap(ValueObjectList &value_object_list) {102 m_value_objects.swap(value_object_list.m_value_objects);103}104