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