Luna/kernel/src/memory/MemoryMap.h

65 lines
1.0 KiB
C
Raw Normal View History

#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, 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();
2022-12-16 19:47:20 +01:00
Option<MemoryMapEntry> next();
MemoryMapEntry largest_free();
MemoryMapEntry highest();
2022-12-16 19:47:20 +01:00
Option<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;
2023-01-02 13:07:29 +01:00
};