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 // C Includes 13 // C++ Includes 14 // Other libraries and framework includes 15 // Project includes 16 #include "lldb/Core/ValueObjectChild.h" 17 #include "lldb/Core/ValueObjectRegister.h" 18 #include "lldb/Core/ValueObjectVariable.h" 19 #include "lldb/Target/ExecutionContext.h" 20 #include "lldb/Target/Process.h" 21 22 using namespace lldb; 23 using namespace lldb_private; 24 25 ValueObjectList::ValueObjectList() : m_value_objects() {} 26 27 ValueObjectList::ValueObjectList(const ValueObjectList &rhs) 28 : m_value_objects(rhs.m_value_objects) {} 29 30 ValueObjectList::~ValueObjectList() {} 31 32 const ValueObjectList &ValueObjectList::operator=(const ValueObjectList &rhs) { 33 if (this != &rhs) 34 m_value_objects = rhs.m_value_objects; 35 return *this; 36 } 37 38 void ValueObjectList::Append(const ValueObjectSP &val_obj_sp) { 39 m_value_objects.push_back(val_obj_sp); 40 } 41 42 void ValueObjectList::Append(const ValueObjectList &valobj_list) { 43 std::copy(valobj_list.m_value_objects.begin(), // source begin 44 valobj_list.m_value_objects.end(), // source end 45 back_inserter(m_value_objects)); // destination 46 } 47 48 size_t ValueObjectList::GetSize() const { return m_value_objects.size(); } 49 50 void ValueObjectList::Resize(size_t size) { m_value_objects.resize(size); } 51 52 lldb::ValueObjectSP ValueObjectList::GetValueObjectAtIndex(size_t idx) { 53 lldb::ValueObjectSP valobj_sp; 54 if (idx < m_value_objects.size()) 55 valobj_sp = m_value_objects[idx]; 56 return valobj_sp; 57 } 58 59 lldb::ValueObjectSP ValueObjectList::RemoveValueObjectAtIndex(size_t idx) { 60 lldb::ValueObjectSP valobj_sp; 61 if (idx < m_value_objects.size()) { 62 valobj_sp = m_value_objects[idx]; 63 m_value_objects.erase(m_value_objects.begin() + idx); 64 } 65 return valobj_sp; 66 } 67 68 void ValueObjectList::SetValueObjectAtIndex(size_t idx, 69 const ValueObjectSP &valobj_sp) { 70 if (idx >= m_value_objects.size()) 71 m_value_objects.resize(idx + 1); 72 m_value_objects[idx] = valobj_sp; 73 } 74 75 ValueObjectSP ValueObjectList::FindValueObjectByValueName(const char *name) { 76 ConstString name_const_str(name); 77 ValueObjectSP val_obj_sp; 78 collection::iterator pos, end = m_value_objects.end(); 79 for (pos = m_value_objects.begin(); pos != end; ++pos) { 80 ValueObject *valobj = (*pos).get(); 81 if (valobj && valobj->GetName() == name_const_str) { 82 val_obj_sp = *pos; 83 break; 84 } 85 } 86 return val_obj_sp; 87 } 88 89 ValueObjectSP ValueObjectList::FindValueObjectByUID(lldb::user_id_t uid) { 90 ValueObjectSP valobj_sp; 91 collection::iterator pos, end = m_value_objects.end(); 92 93 for (pos = m_value_objects.begin(); pos != end; ++pos) { 94 // Watch out for NULL objects in our list as the list 95 // might get resized to a specific size and lazily filled in 96 ValueObject *valobj = (*pos).get(); 97 if (valobj && valobj->GetID() == uid) { 98 valobj_sp = *pos; 99 break; 100 } 101 } 102 return valobj_sp; 103 } 104 105 ValueObjectSP 106 ValueObjectList::FindValueObjectByPointer(ValueObject *find_valobj) { 107 ValueObjectSP valobj_sp; 108 collection::iterator pos, end = m_value_objects.end(); 109 110 for (pos = m_value_objects.begin(); pos != end; ++pos) { 111 ValueObject *valobj = (*pos).get(); 112 if (valobj && valobj == find_valobj) { 113 valobj_sp = *pos; 114 break; 115 } 116 } 117 return valobj_sp; 118 } 119 120 void ValueObjectList::Swap(ValueObjectList &value_object_list) { 121 m_value_objects.swap(value_object_list.m_value_objects); 122 } 123