55 lines
993 B
C
Raw Normal View History

2024-09-08 08:32:31 +06:00
#pragma once
#include <string>
#include <cstdint>
enum SectionFlags : uint8_t
{
SectionFlags_None = 0,
SectionFlags_Data = 1,
SectionFlags_Code = 2
};
struct Section
{
std::string name{};
size_t base{};
uint32_t size{};
SectionFlags flags{};
uint8_t* data{};
bool operator<(size_t address) const
{
return address < base;
}
bool operator>(size_t address) const
{
return address >= (base + size);
}
bool operator==(size_t address) const
{
return address >= base && address < base + size;
}
};
struct SectionComparer
{
using is_transparent = void;
bool operator()(const Section& lhs, size_t rhs) const
{
return rhs > lhs.base + lhs.size;
}
bool operator()(size_t lhs, const Section& rhs) const
{
return lhs < rhs.base;
}
bool operator()(const Section& lhs, const Section& rhs) const
{
return (lhs.base + lhs.size) < rhs.base;
}
};