124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- DWARFDIECollection.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 "DWARFDIECollection.h"
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <algorithm>
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Stream.h"
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "DWARFDebugInfoEntry.h"
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private;
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace std;
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerDWARFDIECollection::Insert(const DWARFDebugInfoEntry *die)
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    iterator end_pos = m_dies.end();
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    iterator insert_pos = upper_bound(m_dies.begin(), end_pos, die);
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (insert_pos != end_pos && (*insert_pos == die))
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return false;
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_dies.insert(insert_pos, die);
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return true;
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
32b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Claytonvoid
33b433a3d8b910d571c0bcdcd5018778ac3763e703Greg ClaytonDWARFDIECollection::Append (const DWARFDebugInfoEntry *die)
34b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton{
35b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton    m_dies.push_back (die);
36b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton}
37b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst DWARFDebugInfoEntry *
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerDWARFDIECollection::GetDIEPtrAtIndex(uint32_t idx) const
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (idx < m_dies.size())
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return m_dies[idx];
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return NULL;
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnersize_t
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerDWARFDIECollection::Size() const
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return m_dies.size();
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerDWARFDIECollection::Dump(Stream *s, const char* title) const
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (title && title[0] != '\0')
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        s->Printf( "%s\n", title);
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const_iterator end_pos = m_dies.end();
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const_iterator pos;
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    for (pos = m_dies.begin(); pos != end_pos; ++pos)
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        s->Printf( "0x%8.8x\n", (*pos)->GetOffset());
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
63