Luna/kernel/src/memory/MemoryMap.h

64 lines
1.0 KiB
C++

#pragma once
#include "boot/bootboot.h"
#include <luna/Result.h>
#include <luna/Types.h>
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<MemoryMapEntry> next();
MemoryMapEntry largest_free();
MemoryMapEntry highest();
Result<MemoryMapEntry> 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;
};