diff options
Diffstat (limited to 'lldb/source/API/SBMemoryRegionInfoList.cpp')
-rw-r--r-- | lldb/source/API/SBMemoryRegionInfoList.cpp | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/lldb/source/API/SBMemoryRegionInfoList.cpp b/lldb/source/API/SBMemoryRegionInfoList.cpp new file mode 100644 index 00000000000..b2e974785a5 --- /dev/null +++ b/lldb/source/API/SBMemoryRegionInfoList.cpp @@ -0,0 +1,162 @@ +//===-- SBMemoryRegionInfoList.cpp ------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "lldb/API/SBMemoryRegionInfo.h" +#include "lldb/API/SBMemoryRegionInfoList.h" +#include "lldb/API/SBStream.h" +#include "lldb/Core/Log.h" +#include "lldb/Target/MemoryRegionInfo.h" + +#include <vector> + +using namespace lldb; +using namespace lldb_private; + +class MemoryRegionInfoListImpl +{ +public: + MemoryRegionInfoListImpl () : + m_regions() + { + } + + MemoryRegionInfoListImpl (const MemoryRegionInfoListImpl& rhs) : + m_regions(rhs.m_regions) + { + } + + MemoryRegionInfoListImpl& + operator = (const MemoryRegionInfoListImpl& rhs) + { + if (this == &rhs) + return *this; + m_regions = rhs.m_regions; + return *this; + } + + uint32_t + GetSize () + { + return m_regions.size(); + } + + void + Append (const lldb::SBMemoryRegionInfo& sb_region) + { + m_regions.push_back(sb_region); + } + + void + Append (const MemoryRegionInfoListImpl& list) + { + for (auto val : list.m_regions) + Append (val); + } + + void + Clear () + { + m_regions.clear(); + } + + bool + GetMemoryRegionInfoAtIndex (uint32_t index, SBMemoryRegionInfo ®ion_info) + { + if (index >= GetSize()) + return false; + region_info = m_regions[index]; + return true; + } + +private: + std::vector<lldb::SBMemoryRegionInfo> m_regions; +}; + +SBMemoryRegionInfoList::SBMemoryRegionInfoList () : + m_opaque_ap (new MemoryRegionInfoListImpl()) +{ +} + +SBMemoryRegionInfoList::SBMemoryRegionInfoList (const SBMemoryRegionInfoList& rhs) : + m_opaque_ap (new MemoryRegionInfoListImpl(*rhs.m_opaque_ap)) +{ +} + +SBMemoryRegionInfoList::~SBMemoryRegionInfoList () +{ +} + +const SBMemoryRegionInfoList & +SBMemoryRegionInfoList::operator = (const SBMemoryRegionInfoList &rhs) +{ + if (this != &rhs) + { + *m_opaque_ap = *rhs.m_opaque_ap; + } + return *this; +} + +uint32_t +SBMemoryRegionInfoList::GetSize() const +{ + return m_opaque_ap->GetSize(); +} + + +bool +SBMemoryRegionInfoList::GetMemoryRegionAtIndex (uint32_t idx, SBMemoryRegionInfo ®ion_info) +{ + Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); + + bool result = m_opaque_ap->GetMemoryRegionInfoAtIndex(idx, region_info); + + if (log) + { + SBStream sstr; + region_info.GetDescription (sstr); + log->Printf ("SBMemoryRegionInfoList::GetMemoryRegionAtIndex (this.ap=%p, idx=%d) => SBMemoryRegionInfo (this.ap=%p, '%s')", + static_cast<void*>(m_opaque_ap.get()), idx, + static_cast<void*>(region_info.m_opaque_ap.get()), sstr.GetData()); + } + + return result; +} + +void +SBMemoryRegionInfoList::Clear() +{ + + m_opaque_ap->Clear(); +} + +void +SBMemoryRegionInfoList::Append(SBMemoryRegionInfo &sb_region) +{ + m_opaque_ap->Append(sb_region); +} + +void +SBMemoryRegionInfoList::Append(SBMemoryRegionInfoList &sb_region_list) +{ + m_opaque_ap->Append(*sb_region_list); +} + +const MemoryRegionInfoListImpl * +SBMemoryRegionInfoList::operator->() const +{ + return m_opaque_ap.get(); +} + +const MemoryRegionInfoListImpl& +SBMemoryRegionInfoList::operator*() const +{ + assert (m_opaque_ap.get()); + return *m_opaque_ap.get(); +} + |