================ @@ -132,6 +140,95 @@ class MinidumpFile : public Binary { size_t Stride; }; + /// Class the provides an iterator over the memory64 memory ranges. Only the + /// the first descriptor is validated as readable beforehand. + class Memory64Iterator { + public: + static Memory64Iterator + begin(ArrayRef<uint8_t> Storage, + ArrayRef<minidump::MemoryDescriptor_64> Descriptors, + uint64_t BaseRVA) { + return Memory64Iterator(Storage, Descriptors, BaseRVA); + } + + static Memory64Iterator end() { return Memory64Iterator(); } + + std::pair<minidump::MemoryDescriptor_64, ArrayRef<uint8_t>> Current; + + bool operator==(const Memory64Iterator &R) const { + return IsEnd == R.IsEnd; + } + + bool operator!=(const Memory64Iterator &R) const { return !(*this == R); } + + const std::pair<minidump::MemoryDescriptor_64, ArrayRef<uint8_t>> & + operator*() { + return Current; + } + + const std::pair<minidump::MemoryDescriptor_64, ArrayRef<uint8_t>> * + operator&() { + return &Current; + } + + Error inc() { + if (Storage.size() == 0 || Descriptors.size() == 0) + return make_error<GenericBinaryError>("No Memory64List Stream", + object_error::parse_failed); + + if (Index >= Descriptors.size()) + return createError("Can't read past of Memory64List Stream"); ---------------- labath wrote:
This should probably be an assertion. The caller shouldn't be incrementing an `end()` iterator, right? https://github.com/llvm/llvm-project/pull/101272 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits