#pragma once #include "boot/bootboot.h" #include #include struct MemoryMapEntry { MemoryMapEntry() = default; MemoryMapEntry(const MemoryMapEntry& other) = default; MemoryMapEntry(u64 address, u64 size, bool is_free); u64 address() const { return m_address; } void* ptr() const { return (void*)m_address; } u64 size() const { return m_size; } bool is_free() const { return m_is_free; } MemoryMapEntry& operator=(const MemoryMapEntry& other); private: u64 m_address; u64 m_size; bool m_is_free; }; class MemoryMapIterator { public: MemoryMapIterator(); void rewind(); Result next(); MemoryMapEntry largest_free(); MemoryMapEntry highest(); Result 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; };