SBMemoryRegionInfoList.cpp revision 304274
1//===-- SBMemoryRegionInfoList.cpp ------------------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "lldb/API/SBMemoryRegionInfo.h"
11#include "lldb/API/SBMemoryRegionInfoList.h"
12#include "lldb/API/SBStream.h"
13#include "lldb/Core/Log.h"
14#include "lldb/Target/MemoryRegionInfo.h"
15
16#include <vector>
17
18using namespace lldb;
19using namespace lldb_private;
20
21class MemoryRegionInfoListImpl
22{
23public:
24    MemoryRegionInfoListImpl () :
25    m_regions()
26    {
27    }
28
29    MemoryRegionInfoListImpl (const MemoryRegionInfoListImpl& rhs) :
30    m_regions(rhs.m_regions)
31    {
32    }
33
34    MemoryRegionInfoListImpl&
35    operator = (const MemoryRegionInfoListImpl& rhs)
36    {
37        if (this == &rhs)
38            return *this;
39        m_regions = rhs.m_regions;
40        return *this;
41    }
42
43    uint32_t
44    GetSize ()
45    {
46        return m_regions.size();
47    }
48
49    void
50    Append (const lldb::SBMemoryRegionInfo& sb_region)
51    {
52        m_regions.push_back(sb_region);
53    }
54
55    void
56    Append (const MemoryRegionInfoListImpl& list)
57    {
58        for (auto val : list.m_regions)
59            Append (val);
60    }
61
62    void
63    Clear ()
64    {
65        m_regions.clear();
66    }
67
68    bool
69    GetMemoryRegionInfoAtIndex (uint32_t index, SBMemoryRegionInfo &region_info)
70    {
71        if (index >= GetSize())
72            return false;
73        region_info = m_regions[index];
74        return true;
75    }
76
77private:
78    std::vector<lldb::SBMemoryRegionInfo> m_regions;
79};
80
81SBMemoryRegionInfoList::SBMemoryRegionInfoList () :
82    m_opaque_ap (new MemoryRegionInfoListImpl())
83{
84}
85
86SBMemoryRegionInfoList::SBMemoryRegionInfoList (const SBMemoryRegionInfoList& rhs) :
87    m_opaque_ap (new MemoryRegionInfoListImpl(*rhs.m_opaque_ap))
88{
89}
90
91SBMemoryRegionInfoList::~SBMemoryRegionInfoList ()
92{
93}
94
95const SBMemoryRegionInfoList &
96SBMemoryRegionInfoList::operator = (const SBMemoryRegionInfoList &rhs)
97{
98    if (this != &rhs)
99    {
100        *m_opaque_ap = *rhs.m_opaque_ap;
101    }
102    return *this;
103}
104
105uint32_t
106SBMemoryRegionInfoList::GetSize() const
107{
108    return m_opaque_ap->GetSize();
109}
110
111
112bool
113SBMemoryRegionInfoList::GetMemoryRegionAtIndex (uint32_t idx, SBMemoryRegionInfo &region_info)
114{
115    Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
116
117    bool result = m_opaque_ap->GetMemoryRegionInfoAtIndex(idx, region_info);
118
119    if (log)
120    {
121        SBStream sstr;
122        region_info.GetDescription (sstr);
123        log->Printf ("SBMemoryRegionInfoList::GetMemoryRegionAtIndex (this.ap=%p, idx=%d) => SBMemoryRegionInfo (this.ap=%p, '%s')",
124                     static_cast<void*>(m_opaque_ap.get()), idx,
125                     static_cast<void*>(region_info.m_opaque_ap.get()), sstr.GetData());
126    }
127
128    return result;
129}
130
131void
132SBMemoryRegionInfoList::Clear()
133{
134
135    m_opaque_ap->Clear();
136}
137
138void
139SBMemoryRegionInfoList::Append(SBMemoryRegionInfo &sb_region)
140{
141    m_opaque_ap->Append(sb_region);
142}
143
144void
145SBMemoryRegionInfoList::Append(SBMemoryRegionInfoList &sb_region_list)
146{
147    m_opaque_ap->Append(*sb_region_list);
148}
149
150const MemoryRegionInfoListImpl *
151SBMemoryRegionInfoList::operator->() const
152{
153    return m_opaque_ap.get();
154}
155
156const MemoryRegionInfoListImpl&
157SBMemoryRegionInfoList::operator*() const
158{
159    assert (m_opaque_ap.get());
160    return *m_opaque_ap.get();
161}
162
163