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 ValueObjectList()25ValueObjectList::ValueObjectList () : 26 m_value_objects() 27 { 28 } 29 ValueObjectList(const ValueObjectList & rhs)30ValueObjectList::ValueObjectList (const ValueObjectList &rhs) : 31 m_value_objects(rhs.m_value_objects) 32 { 33 } 34 35 ~ValueObjectList()36ValueObjectList::~ValueObjectList () 37 { 38 } 39 40 const ValueObjectList & operator =(const ValueObjectList & rhs)41ValueObjectList::operator = (const ValueObjectList &rhs) 42 { 43 if (this != &rhs) 44 m_value_objects = rhs.m_value_objects; 45 return *this; 46 } 47 48 void Append(const ValueObjectSP & val_obj_sp)49ValueObjectList::Append (const ValueObjectSP &val_obj_sp) 50 { 51 m_value_objects.push_back(val_obj_sp); 52 } 53 54 void Append(const ValueObjectList & valobj_list)55ValueObjectList::Append (const ValueObjectList &valobj_list) 56 { 57 std::copy(valobj_list.m_value_objects.begin(), // source begin 58 valobj_list.m_value_objects.end(), // source end 59 back_inserter(m_value_objects)); // destination 60 61 } 62 63 64 size_t GetSize() const65ValueObjectList::GetSize() const 66 { 67 return m_value_objects.size(); 68 } 69 70 void Resize(size_t size)71ValueObjectList::Resize (size_t size) 72 { 73 m_value_objects.resize (size); 74 } 75 76 lldb::ValueObjectSP GetValueObjectAtIndex(size_t idx)77ValueObjectList::GetValueObjectAtIndex (size_t idx) 78 { 79 lldb::ValueObjectSP valobj_sp; 80 if (idx < m_value_objects.size()) 81 valobj_sp = m_value_objects[idx]; 82 return valobj_sp; 83 } 84 85 lldb::ValueObjectSP RemoveValueObjectAtIndex(size_t idx)86ValueObjectList::RemoveValueObjectAtIndex (size_t idx) 87 { 88 lldb::ValueObjectSP valobj_sp; 89 if (idx < m_value_objects.size()) 90 { 91 valobj_sp = m_value_objects[idx]; 92 m_value_objects.erase (m_value_objects.begin() + idx); 93 } 94 return valobj_sp; 95 } 96 97 void SetValueObjectAtIndex(size_t idx,const ValueObjectSP & valobj_sp)98ValueObjectList::SetValueObjectAtIndex (size_t idx, const ValueObjectSP &valobj_sp) 99 { 100 if (idx >= m_value_objects.size()) 101 m_value_objects.resize (idx + 1); 102 m_value_objects[idx] = valobj_sp; 103 } 104 105 ValueObjectSP FindValueObjectByValueName(const char * name)106ValueObjectList::FindValueObjectByValueName (const char *name) 107 { 108 ConstString name_const_str(name); 109 ValueObjectSP val_obj_sp; 110 collection::iterator pos, end = m_value_objects.end(); 111 for (pos = m_value_objects.begin(); pos != end; ++pos) 112 { 113 ValueObject *valobj = (*pos).get(); 114 if (valobj && valobj->GetName() == name_const_str) 115 { 116 val_obj_sp = *pos; 117 break; 118 } 119 } 120 return val_obj_sp; 121 } 122 123 ValueObjectSP FindValueObjectByUID(lldb::user_id_t uid)124ValueObjectList::FindValueObjectByUID (lldb::user_id_t uid) 125 { 126 ValueObjectSP valobj_sp; 127 collection::iterator pos, end = m_value_objects.end(); 128 129 for (pos = m_value_objects.begin(); pos != end; ++pos) 130 { 131 // Watch out for NULL objects in our list as the list 132 // might get resized to a specific size and lazily filled in 133 ValueObject *valobj = (*pos).get(); 134 if (valobj && valobj->GetID() == uid) 135 { 136 valobj_sp = *pos; 137 break; 138 } 139 } 140 return valobj_sp; 141 } 142 143 144 ValueObjectSP FindValueObjectByPointer(ValueObject * find_valobj)145ValueObjectList::FindValueObjectByPointer (ValueObject *find_valobj) 146 { 147 ValueObjectSP valobj_sp; 148 collection::iterator pos, end = m_value_objects.end(); 149 150 for (pos = m_value_objects.begin(); pos != end; ++pos) 151 { 152 ValueObject *valobj = (*pos).get(); 153 if (valobj && valobj == find_valobj) 154 { 155 valobj_sp = *pos; 156 break; 157 } 158 } 159 return valobj_sp; 160 } 161 162 void Swap(ValueObjectList & value_object_list)163ValueObjectList::Swap (ValueObjectList &value_object_list) 164 { 165 m_value_objects.swap (value_object_list.m_value_objects); 166 } 167