diff --git a/src/Targets/TargetAddressSpaceDescriptor.cpp b/src/Targets/TargetAddressSpaceDescriptor.cpp index 44f016fb..c5c65a8e 100644 --- a/src/Targets/TargetAddressSpaceDescriptor.cpp +++ b/src/Targets/TargetAddressSpaceDescriptor.cpp @@ -46,4 +46,20 @@ namespace Targets return segment->get(); } + + std::vector< + const TargetMemorySegmentDescriptor* + > TargetAddressSpaceDescriptor::getIntersectingMemorySegmentDescriptors( + const TargetMemoryAddressRange& addressRange + ) const { + auto output = std::vector(); + + for (const auto& [key, segmentDescriptor] : this->segmentDescriptorsByKey) { + if (segmentDescriptor.addressRange.intersectsWith(addressRange)) { + output.push_back(&segmentDescriptor); + } + } + + return output; + } } diff --git a/src/Targets/TargetAddressSpaceDescriptor.hpp b/src/Targets/TargetAddressSpaceDescriptor.hpp index 6191d869..2763b7b8 100644 --- a/src/Targets/TargetAddressSpaceDescriptor.hpp +++ b/src/Targets/TargetAddressSpaceDescriptor.hpp @@ -56,6 +56,19 @@ namespace Targets */ const TargetMemorySegmentDescriptor& getMemorySegmentDescriptor(const std::string& key) const; + /** + * Fetches all memory segments in the address space that intersect with the given address range. + * + * @param addressRange + * The address range with which the memory segments must intersect. + * + * @return + * Pointers to descriptors of all intersecting memory segments. + */ + std::vector getIntersectingMemorySegmentDescriptors( + const TargetMemoryAddressRange& addressRange + ) const; + private: static inline std::atomic lastAddressSpaceDescriptorId = 0; };