1 //===-- VariableList.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/Symbol/VariableList.h"
12 #include "lldb/Core/RegularExpression.h"
13 #include "lldb/Symbol/Block.h"
14 #include "lldb/Symbol/Function.h"
15 #include "lldb/Symbol/CompileUnit.h"
18 using namespace lldb_private;
20 //----------------------------------------------------------------------
21 // VariableList constructor
22 //----------------------------------------------------------------------
23 VariableList::VariableList() :
28 //----------------------------------------------------------------------
30 //----------------------------------------------------------------------
31 VariableList::~VariableList()
36 VariableList::AddVariable(const VariableSP &var_sp)
38 m_variables.push_back(var_sp);
42 VariableList::AddVariableIfUnique (const lldb::VariableSP &var_sp)
44 if (FindVariableIndex (var_sp) == UINT32_MAX)
46 m_variables.push_back(var_sp);
53 VariableList::AddVariables(VariableList *variable_list)
57 std::copy(variable_list->m_variables.begin(), // source begin
58 variable_list->m_variables.end(), // source end
59 back_inserter(m_variables)); // destination
70 VariableList::GetVariableAtIndex(size_t idx) const
73 if (idx < m_variables.size())
74 var_sp = m_variables[idx];
79 VariableList::RemoveVariableAtIndex(size_t idx)
82 if (idx < m_variables.size())
84 var_sp = m_variables[idx];
85 m_variables.erase (m_variables.begin() + idx);
91 VariableList::FindVariableIndex (const VariableSP &var_sp)
93 iterator pos, end = m_variables.end();
94 for (pos = m_variables.begin(); pos != end; ++pos)
96 if (pos->get() == var_sp.get())
97 return std::distance (m_variables.begin(), pos);
103 VariableList::FindVariable(const ConstString& name)
106 iterator pos, end = m_variables.end();
107 for (pos = m_variables.begin(); pos != end; ++pos)
109 if ((*pos)->NameMatches(name))
119 VariableList::AppendVariablesIfUnique (const RegularExpression& regex, VariableList &var_list, size_t& total_matches)
121 const size_t initial_size = var_list.GetSize();
122 iterator pos, end = m_variables.end();
123 for (pos = m_variables.begin(); pos != end; ++pos)
125 if ((*pos)->NameMatches (regex))
127 // Note the total matches found
129 // Only add this variable if it isn't already in the "var_list"
130 var_list.AddVariableIfUnique (*pos);
133 // Return the number of new unique variables added to "var_list"
134 return var_list.GetSize() - initial_size;
138 VariableList::AppendVariablesWithScope (lldb::ValueType type,
139 VariableList &var_list,
142 const size_t initial_size = var_list.GetSize();
143 iterator pos, end = m_variables.end();
144 for (pos = m_variables.begin(); pos != end; ++pos)
146 if ((*pos)->GetScope() == type)
149 var_list.AddVariableIfUnique (*pos);
151 var_list.AddVariable(*pos);
154 // Return the number of new unique variables added to "var_list"
155 return var_list.GetSize() - initial_size;
159 VariableList::FindIndexForVariable (Variable* variable)
163 const iterator begin = m_variables.begin();
164 const iterator end = m_variables.end();
165 for (pos = m_variables.begin(); pos != end; ++pos)
167 if ((*pos).get() == variable)
168 return std::distance (begin, pos);
174 VariableList::MemorySize() const
176 size_t mem_size = sizeof(VariableList);
177 const_iterator pos, end = m_variables.end();
178 for (pos = m_variables.begin(); pos != end; ++pos)
179 mem_size += (*pos)->MemorySize();
184 VariableList::GetSize() const
186 return m_variables.size();
190 VariableList::Dump(Stream *s, bool show_context) const
192 // s.Printf("%.*p: ", (int)sizeof(void*) * 2, this);
194 // s << "VariableList\n";
196 const_iterator pos, end = m_variables.end();
197 for (pos = m_variables.begin(); pos != end; ++pos)
199 (*pos)->Dump(s, show_context);