#pragma once #include "boot/bootboot.h" #include #include struct MemoryMapEntry { MemoryMapEntry() = default; MemoryMapEntry(const MemoryMapEntry& other) = default; MemoryMapEntry(u64 address, usize size, bool is_free); u64 address() const { return m_address; } void* ptr() const { return (void*)m_address; } usize size() const { return m_size; } bool is_free() const { return m_is_free; } MemoryMapEntry& operator=(const MemoryMapEntry& other); private: u64 m_address; usize m_size; bool m_is_free; }; class MemoryMapIterator { public: MemoryMapIterator(); void rewind(); Option next(); MemoryMapEntry largest_free(); MemoryMapEntry highest(); Option at(usize index) const; usize entries() const { return m_mmap_entries; } private: const usize m_mmap_entries; const MMapEnt* m_base_ent; usize m_cur_ent; };