1 //===-- ValueObjectList.cpp -------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "lldb/Core/ValueObjectList.h"
12 #include "lldb/Core/ValueObject.h" // for ValueObject
13 #include "lldb/Utility/ConstString.h" // for ConstString
14 #include "lldb/Utility/SharingPtr.h" // for SharingPtr
16 #include <utility> // for back_insert_iterator, back_ins...
19 using namespace lldb_private;
21 ValueObjectList::ValueObjectList() : m_value_objects() {}
23 ValueObjectList::ValueObjectList(const ValueObjectList &rhs)
24 : m_value_objects(rhs.m_value_objects) {}
26 ValueObjectList::~ValueObjectList() {}
28 const ValueObjectList &ValueObjectList::operator=(const ValueObjectList &rhs) {
30 m_value_objects = rhs.m_value_objects;
34 void ValueObjectList::Append(const ValueObjectSP &val_obj_sp) {
35 m_value_objects.push_back(val_obj_sp);
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
44 size_t ValueObjectList::GetSize() const { return m_value_objects.size(); }
46 void ValueObjectList::Resize(size_t size) { m_value_objects.resize(size); }
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];
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);
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;
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) {
85 ValueObjectSP ValueObjectList::FindValueObjectByUID(lldb::user_id_t uid) {
86 ValueObjectSP valobj_sp;
87 collection::iterator pos, end = m_value_objects.end();
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) {
102 ValueObjectList::FindValueObjectByPointer(ValueObject *find_valobj) {
103 ValueObjectSP valobj_sp;
104 collection::iterator pos, end = m_value_objects.end();
106 for (pos = m_value_objects.begin(); pos != end; ++pos) {
107 ValueObject *valobj = (*pos).get();
108 if (valobj && valobj == find_valobj) {
116 void ValueObjectList::Swap(ValueObjectList &value_object_list) {
117 m_value_objects.swap(value_object_list.m_value_objects);