]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/source/Core/ValueObjectList.cpp
MFV r337184: 9457 libzfs_import.c:add_config() has a memory leak
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / 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 #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
18 using namespace lldb;
19 using namespace lldb_private;
20
21 ValueObjectList::ValueObjectList() : m_value_objects() {}
22
23 ValueObjectList::ValueObjectList(const ValueObjectList &rhs)
24     : m_value_objects(rhs.m_value_objects) {}
25
26 ValueObjectList::~ValueObjectList() {}
27
28 const ValueObjectList &ValueObjectList::operator=(const ValueObjectList &rhs) {
29   if (this != &rhs)
30     m_value_objects = rhs.m_value_objects;
31   return *this;
32 }
33
34 void ValueObjectList::Append(const ValueObjectSP &val_obj_sp) {
35   m_value_objects.push_back(val_obj_sp);
36 }
37
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
42 }
43
44 size_t ValueObjectList::GetSize() const { return m_value_objects.size(); }
45
46 void ValueObjectList::Resize(size_t size) { m_value_objects.resize(size); }
47
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];
52   return valobj_sp;
53 }
54
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);
60   }
61   return valobj_sp;
62 }
63
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;
69 }
70
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) {
78       val_obj_sp = *pos;
79       break;
80     }
81   }
82   return val_obj_sp;
83 }
84
85 ValueObjectSP 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
91     // might get resized to 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
101 ValueObjectSP
102 ValueObjectList::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
116 void ValueObjectList::Swap(ValueObjectList &value_object_list) {
117   m_value_objects.swap(value_object_list.m_value_objects);
118 }