1254721Semaste//===-- ValueObjectList.cpp -------------------------------------*- C++ -*-===//
2254721Semaste//
3254721Semaste//                     The LLVM Compiler Infrastructure
4254721Semaste//
5254721Semaste// This file is distributed under the University of Illinois Open Source
6254721Semaste// License. See LICENSE.TXT for details.
7254721Semaste//
8254721Semaste//===----------------------------------------------------------------------===//
9254721Semaste
10254721Semaste#include "lldb/Core/ValueObjectList.h"
11254721Semaste
12254721Semaste// C Includes
13254721Semaste// C++ Includes
14254721Semaste// Other libraries and framework includes
15254721Semaste// Project includes
16254721Semaste#include "lldb/Core/ValueObjectChild.h"
17254721Semaste#include "lldb/Core/ValueObjectRegister.h"
18254721Semaste#include "lldb/Core/ValueObjectVariable.h"
19254721Semaste#include "lldb/Target/ExecutionContext.h"
20254721Semaste#include "lldb/Target/Process.h"
21254721Semaste
22254721Semasteusing namespace lldb;
23254721Semasteusing namespace lldb_private;
24254721Semaste
25254721SemasteValueObjectList::ValueObjectList () :
26254721Semaste    m_value_objects()
27254721Semaste{
28254721Semaste}
29254721Semaste
30254721SemasteValueObjectList::ValueObjectList (const ValueObjectList &rhs) :
31254721Semaste    m_value_objects(rhs.m_value_objects)
32254721Semaste{
33254721Semaste}
34254721Semaste
35254721Semaste
36254721SemasteValueObjectList::~ValueObjectList ()
37254721Semaste{
38254721Semaste}
39254721Semaste
40254721Semasteconst ValueObjectList &
41254721SemasteValueObjectList::operator = (const ValueObjectList &rhs)
42254721Semaste{
43254721Semaste    if (this != &rhs)
44254721Semaste        m_value_objects = rhs.m_value_objects;
45254721Semaste    return *this;
46254721Semaste}
47254721Semaste
48254721Semastevoid
49254721SemasteValueObjectList::Append (const ValueObjectSP &val_obj_sp)
50254721Semaste{
51254721Semaste    m_value_objects.push_back(val_obj_sp);
52254721Semaste}
53254721Semaste
54254721Semastevoid
55254721SemasteValueObjectList::Append (const ValueObjectList &valobj_list)
56254721Semaste{
57254721Semaste    std::copy(valobj_list.m_value_objects.begin(),  // source begin
58254721Semaste              valobj_list.m_value_objects.end(),    // source end
59254721Semaste              back_inserter(m_value_objects));      // destination
60254721Semaste
61254721Semaste}
62254721Semaste
63254721Semaste
64254721Semastesize_t
65254721SemasteValueObjectList::GetSize() const
66254721Semaste{
67254721Semaste    return m_value_objects.size();
68254721Semaste}
69254721Semaste
70254721Semastevoid
71254721SemasteValueObjectList::Resize (size_t size)
72254721Semaste{
73254721Semaste    m_value_objects.resize (size);
74254721Semaste}
75254721Semaste
76254721Semastelldb::ValueObjectSP
77254721SemasteValueObjectList::GetValueObjectAtIndex (size_t idx)
78254721Semaste{
79254721Semaste    lldb::ValueObjectSP valobj_sp;
80254721Semaste    if (idx < m_value_objects.size())
81254721Semaste        valobj_sp = m_value_objects[idx];
82254721Semaste    return valobj_sp;
83254721Semaste}
84254721Semaste
85254721Semastelldb::ValueObjectSP
86254721SemasteValueObjectList::RemoveValueObjectAtIndex (size_t idx)
87254721Semaste{
88254721Semaste    lldb::ValueObjectSP valobj_sp;
89254721Semaste    if (idx < m_value_objects.size())
90254721Semaste    {
91254721Semaste        valobj_sp = m_value_objects[idx];
92254721Semaste        m_value_objects.erase (m_value_objects.begin() + idx);
93254721Semaste    }
94254721Semaste    return valobj_sp;
95254721Semaste}
96254721Semaste
97254721Semastevoid
98254721SemasteValueObjectList::SetValueObjectAtIndex (size_t idx, const ValueObjectSP &valobj_sp)
99254721Semaste{
100254721Semaste    if (idx >= m_value_objects.size())
101254721Semaste        m_value_objects.resize (idx + 1);
102254721Semaste    m_value_objects[idx] = valobj_sp;
103254721Semaste}
104254721Semaste
105254721SemasteValueObjectSP
106254721SemasteValueObjectList::FindValueObjectByValueName (const char *name)
107254721Semaste{
108254721Semaste    ConstString name_const_str(name);
109254721Semaste    ValueObjectSP val_obj_sp;
110254721Semaste    collection::iterator pos, end = m_value_objects.end();
111254721Semaste    for (pos = m_value_objects.begin(); pos != end; ++pos)
112254721Semaste    {
113254721Semaste        ValueObject *valobj = (*pos).get();
114254721Semaste        if (valobj && valobj->GetName() == name_const_str)
115254721Semaste        {
116254721Semaste            val_obj_sp = *pos;
117254721Semaste            break;
118254721Semaste        }
119254721Semaste    }
120254721Semaste    return val_obj_sp;
121254721Semaste}
122254721Semaste
123254721SemasteValueObjectSP
124254721SemasteValueObjectList::FindValueObjectByUID (lldb::user_id_t uid)
125254721Semaste{
126254721Semaste    ValueObjectSP valobj_sp;
127254721Semaste    collection::iterator pos, end = m_value_objects.end();
128254721Semaste
129254721Semaste    for (pos = m_value_objects.begin(); pos != end; ++pos)
130254721Semaste    {
131254721Semaste        // Watch out for NULL objects in our list as the list
132254721Semaste        // might get resized to a specific size and lazily filled in
133254721Semaste        ValueObject *valobj = (*pos).get();
134254721Semaste        if (valobj && valobj->GetID() == uid)
135254721Semaste        {
136254721Semaste            valobj_sp = *pos;
137254721Semaste            break;
138254721Semaste        }
139254721Semaste    }
140254721Semaste    return valobj_sp;
141254721Semaste}
142254721Semaste
143254721Semaste
144254721SemasteValueObjectSP
145254721SemasteValueObjectList::FindValueObjectByPointer (ValueObject *find_valobj)
146254721Semaste{
147254721Semaste    ValueObjectSP valobj_sp;
148254721Semaste    collection::iterator pos, end = m_value_objects.end();
149254721Semaste
150254721Semaste    for (pos = m_value_objects.begin(); pos != end; ++pos)
151254721Semaste    {
152254721Semaste        ValueObject *valobj = (*pos).get();
153254721Semaste        if (valobj && valobj == find_valobj)
154254721Semaste        {
155254721Semaste            valobj_sp = *pos;
156254721Semaste            break;
157254721Semaste        }
158254721Semaste    }
159254721Semaste    return valobj_sp;
160254721Semaste}
161254721Semaste
162254721Semastevoid
163254721SemasteValueObjectList::Swap (ValueObjectList &value_object_list)
164254721Semaste{
165254721Semaste    m_value_objects.swap (value_object_list.m_value_objects);
166254721Semaste}
167