//===-- 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 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 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(m_opaque_ap.get()), idx, static_cast(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(); }