Path: blob/main/contrib/llvm-project/lldb/source/API/SBMemoryRegionInfoList.cpp
39587 views
//===-- SBMemoryRegionInfoList.cpp ----------------------------------------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#include "lldb/API/SBMemoryRegionInfoList.h"9#include "lldb/API/SBMemoryRegionInfo.h"10#include "lldb/API/SBStream.h"11#include "lldb/Target/MemoryRegionInfo.h"12#include "lldb/Utility/Instrumentation.h"1314#include <vector>1516using namespace lldb;17using namespace lldb_private;1819class MemoryRegionInfoListImpl {20public:21MemoryRegionInfoListImpl() : m_regions() {}2223MemoryRegionInfoListImpl(const MemoryRegionInfoListImpl &rhs) = default;2425MemoryRegionInfoListImpl &operator=(const MemoryRegionInfoListImpl &rhs) {26if (this == &rhs)27return *this;28m_regions = rhs.m_regions;29return *this;30}3132size_t GetSize() const { return m_regions.size(); }3334void Reserve(size_t capacity) { return m_regions.reserve(capacity); }3536void Append(const MemoryRegionInfo &sb_region) {37m_regions.push_back(sb_region);38}3940void Append(const MemoryRegionInfoListImpl &list) {41Reserve(GetSize() + list.GetSize());4243for (const auto &val : list.m_regions)44Append(val);45}4647void Clear() { m_regions.clear(); }4849bool GetMemoryRegionContainingAddress(lldb::addr_t addr,50MemoryRegionInfo ®ion_info) {51for (auto ®ion : m_regions) {52if (region.GetRange().Contains(addr)) {53region_info = region;54return true;55}56}57return false;58}5960bool GetMemoryRegionInfoAtIndex(size_t index,61MemoryRegionInfo ®ion_info) {62if (index >= GetSize())63return false;64region_info = m_regions[index];65return true;66}6768MemoryRegionInfos &Ref() { return m_regions; }6970const MemoryRegionInfos &Ref() const { return m_regions; }7172private:73MemoryRegionInfos m_regions;74};7576MemoryRegionInfos &SBMemoryRegionInfoList::ref() { return m_opaque_up->Ref(); }7778const MemoryRegionInfos &SBMemoryRegionInfoList::ref() const {79return m_opaque_up->Ref();80}8182SBMemoryRegionInfoList::SBMemoryRegionInfoList()83: m_opaque_up(new MemoryRegionInfoListImpl()) {84LLDB_INSTRUMENT_VA(this);85}8687SBMemoryRegionInfoList::SBMemoryRegionInfoList(88const SBMemoryRegionInfoList &rhs)89: m_opaque_up(new MemoryRegionInfoListImpl(*rhs.m_opaque_up)) {90LLDB_INSTRUMENT_VA(this, rhs);91}9293SBMemoryRegionInfoList::~SBMemoryRegionInfoList() = default;9495const SBMemoryRegionInfoList &SBMemoryRegionInfoList::96operator=(const SBMemoryRegionInfoList &rhs) {97LLDB_INSTRUMENT_VA(this, rhs);9899if (this != &rhs) {100*m_opaque_up = *rhs.m_opaque_up;101}102return *this;103}104105uint32_t SBMemoryRegionInfoList::GetSize() const {106LLDB_INSTRUMENT_VA(this);107108return m_opaque_up->GetSize();109}110111bool SBMemoryRegionInfoList::GetMemoryRegionContainingAddress(112lldb::addr_t addr, SBMemoryRegionInfo ®ion_info) {113LLDB_INSTRUMENT_VA(this, addr, region_info);114115return m_opaque_up->GetMemoryRegionContainingAddress(addr, region_info.ref());116}117118bool SBMemoryRegionInfoList::GetMemoryRegionAtIndex(119uint32_t idx, SBMemoryRegionInfo ®ion_info) {120LLDB_INSTRUMENT_VA(this, idx, region_info);121122return m_opaque_up->GetMemoryRegionInfoAtIndex(idx, region_info.ref());123}124125void SBMemoryRegionInfoList::Clear() {126LLDB_INSTRUMENT_VA(this);127128m_opaque_up->Clear();129}130131void SBMemoryRegionInfoList::Append(SBMemoryRegionInfo &sb_region) {132LLDB_INSTRUMENT_VA(this, sb_region);133134m_opaque_up->Append(sb_region.ref());135}136137void SBMemoryRegionInfoList::Append(SBMemoryRegionInfoList &sb_region_list) {138LLDB_INSTRUMENT_VA(this, sb_region_list);139140m_opaque_up->Append(*sb_region_list);141}142143const MemoryRegionInfoListImpl *SBMemoryRegionInfoList::operator->() const {144return m_opaque_up.get();145}146147const MemoryRegionInfoListImpl &SBMemoryRegionInfoList::operator*() const {148assert(m_opaque_up.get());149return *m_opaque_up;150}151152153