]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - source/Core/ValueObjectList.cpp
Vendor import of lldb trunk r290819:
[FreeBSD/FreeBSD.git] / source / Core / ValueObjectList.cpp
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 }