124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- ValueObjectList.cpp -------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/ValueObjectList.h" 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/ValueObjectChild.h" 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/ValueObjectRegister.h" 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/ValueObjectVariable.h" 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/ExecutionContext.h" 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Process.h" 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb; 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private; 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerValueObjectList::ValueObjectList () : 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_value_objects() 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerValueObjectList::ValueObjectList (const ValueObjectList &rhs) : 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_value_objects(rhs.m_value_objects) 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerValueObjectList::~ValueObjectList () 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst ValueObjectList & 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerValueObjectList::operator = (const ValueObjectList &rhs) 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (this != &rhs) 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_value_objects = rhs.m_value_objects; 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return *this; 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerValueObjectList::Append (const ValueObjectSP &val_obj_sp) 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_value_objects.push_back(val_obj_sp); 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 54917c000e77fcf657099f59085d6436d179a39ea4Greg Claytonvoid 55917c000e77fcf657099f59085d6436d179a39ea4Greg ClaytonValueObjectList::Append (const ValueObjectList &valobj_list) 56917c000e77fcf657099f59085d6436d179a39ea4Greg Clayton{ 57917c000e77fcf657099f59085d6436d179a39ea4Greg Clayton std::copy(valobj_list.m_value_objects.begin(), // source begin 58917c000e77fcf657099f59085d6436d179a39ea4Greg Clayton valobj_list.m_value_objects.end(), // source end 59917c000e77fcf657099f59085d6436d179a39ea4Greg Clayton back_inserter(m_value_objects)); // destination 60917c000e77fcf657099f59085d6436d179a39ea4Greg Clayton 61917c000e77fcf657099f59085d6436d179a39ea4Greg Clayton} 62917c000e77fcf657099f59085d6436d179a39ea4Greg Clayton 63917c000e77fcf657099f59085d6436d179a39ea4Greg Clayton 6436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Claytonsize_t 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerValueObjectList::GetSize() const 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_value_objects.size(); 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7017dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Claytonvoid 7136da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg ClaytonValueObjectList::Resize (size_t size) 7217dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Clayton{ 7317dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Clayton m_value_objects.resize (size); 7417dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Clayton} 7517dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Clayton 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb::ValueObjectSP 7736da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg ClaytonValueObjectList::GetValueObjectAtIndex (size_t idx) 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::ValueObjectSP valobj_sp; 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (idx < m_value_objects.size()) 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner valobj_sp = m_value_objects[idx]; 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return valobj_sp; 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 855d81f49f0b45f8810cfaf1fa3437aa72bed0c3afGreg Claytonlldb::ValueObjectSP 8636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg ClaytonValueObjectList::RemoveValueObjectAtIndex (size_t idx) 875d81f49f0b45f8810cfaf1fa3437aa72bed0c3afGreg Clayton{ 885d81f49f0b45f8810cfaf1fa3437aa72bed0c3afGreg Clayton lldb::ValueObjectSP valobj_sp; 895d81f49f0b45f8810cfaf1fa3437aa72bed0c3afGreg Clayton if (idx < m_value_objects.size()) 905d81f49f0b45f8810cfaf1fa3437aa72bed0c3afGreg Clayton { 915d81f49f0b45f8810cfaf1fa3437aa72bed0c3afGreg Clayton valobj_sp = m_value_objects[idx]; 925d81f49f0b45f8810cfaf1fa3437aa72bed0c3afGreg Clayton m_value_objects.erase (m_value_objects.begin() + idx); 935d81f49f0b45f8810cfaf1fa3437aa72bed0c3afGreg Clayton } 945d81f49f0b45f8810cfaf1fa3437aa72bed0c3afGreg Clayton return valobj_sp; 955d81f49f0b45f8810cfaf1fa3437aa72bed0c3afGreg Clayton} 965d81f49f0b45f8810cfaf1fa3437aa72bed0c3afGreg Clayton 9717dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Claytonvoid 9836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg ClaytonValueObjectList::SetValueObjectAtIndex (size_t idx, const ValueObjectSP &valobj_sp) 9917dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Clayton{ 10017dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Clayton if (idx >= m_value_objects.size()) 10117dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Clayton m_value_objects.resize (idx + 1); 10217dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Clayton m_value_objects[idx] = valobj_sp; 10317dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Clayton} 10417dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Clayton 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerValueObjectSP 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerValueObjectList::FindValueObjectByValueName (const char *name) 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ConstString name_const_str(name); 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ValueObjectSP val_obj_sp; 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner collection::iterator pos, end = m_value_objects.end(); 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner for (pos = m_value_objects.begin(); pos != end; ++pos) 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 11317dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Clayton ValueObject *valobj = (*pos).get(); 11417dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Clayton if (valobj && valobj->GetName() == name_const_str) 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner val_obj_sp = *pos; 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return val_obj_sp; 12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerValueObjectSP 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerValueObjectList::FindValueObjectByUID (lldb::user_id_t uid) 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ValueObjectSP valobj_sp; 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner collection::iterator pos, end = m_value_objects.end(); 12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner for (pos = m_value_objects.begin(); pos != end; ++pos) 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 13117dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Clayton // Watch out for NULL objects in our list as the list 13217dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Clayton // might get resized to a specific size and lazily filled in 13317dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Clayton ValueObject *valobj = (*pos).get(); 13417dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Clayton if (valobj && valobj->GetID() == uid) 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner valobj_sp = *pos; 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return valobj_sp; 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerValueObjectSP 14517dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg ClaytonValueObjectList::FindValueObjectByPointer (ValueObject *find_valobj) 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ValueObjectSP valobj_sp; 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner collection::iterator pos, end = m_value_objects.end(); 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner for (pos = m_value_objects.begin(); pos != end; ++pos) 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 15217dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Clayton ValueObject *valobj = (*pos).get(); 15317dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Clayton if (valobj && valobj == find_valobj) 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner valobj_sp = *pos; 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return valobj_sp; 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 161870a1cdb923ce708d474af357dd1fea3d063ab97Greg Clayton 162870a1cdb923ce708d474af357dd1fea3d063ab97Greg Claytonvoid 163870a1cdb923ce708d474af357dd1fea3d063ab97Greg ClaytonValueObjectList::Swap (ValueObjectList &value_object_list) 164870a1cdb923ce708d474af357dd1fea3d063ab97Greg Clayton{ 165870a1cdb923ce708d474af357dd1fea3d063ab97Greg Clayton m_value_objects.swap (value_object_list.m_value_objects); 166870a1cdb923ce708d474af357dd1fea3d063ab97Greg Clayton} 167