ValueObjectList.cpp revision 341825
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 18using namespace lldb; 19using namespace lldb_private; 20 21ValueObjectList::ValueObjectList() : m_value_objects() {} 22 23ValueObjectList::ValueObjectList(const ValueObjectList &rhs) 24 : m_value_objects(rhs.m_value_objects) {} 25 26ValueObjectList::~ValueObjectList() {} 27 28const ValueObjectList &ValueObjectList::operator=(const ValueObjectList &rhs) { 29 if (this != &rhs) 30 m_value_objects = rhs.m_value_objects; 31 return *this; 32} 33 34void ValueObjectList::Append(const ValueObjectSP &val_obj_sp) { 35 m_value_objects.push_back(val_obj_sp); 36} 37 38void 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 44size_t ValueObjectList::GetSize() const { return m_value_objects.size(); } 45 46void ValueObjectList::Resize(size_t size) { m_value_objects.resize(size); } 47 48lldb::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 55lldb::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 64void 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 71ValueObjectSP 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 85ValueObjectSP 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 might get resized to 91 // 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 101ValueObjectSP 102ValueObjectList::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 116void ValueObjectList::Swap(ValueObjectList &value_object_list) { 117 m_value_objects.swap(value_object_list.m_value_objects); 118} 119