blob: b2e974785a5c8ae7bb4dd7febf5235ab1a3bf714 [file] [log] [blame]
Howard Hellyer260368432016-06-23 08:35:37 +00001//===-- 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