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