BAN: Modify Span constructors to keep constness correctly

This commit is contained in:
Bananymous 2023-03-23 14:26:03 +02:00
parent e9da63ad79
commit 3ef72e8a7b
4 changed files with 26 additions and 8 deletions

View File

@ -20,6 +20,10 @@ namespace BAN
public:
Span() = default;
Span(T*, size_type);
Span(Span<T>&);
template<typename S>
requires(is_same_v<T, const S>)
Span(const Span<S>&);
iterator begin() { return iterator(m_data); }
iterator end() { return iterator(m_data + m_size); }
@ -51,6 +55,22 @@ namespace BAN
{
}
template<typename T>
Span<T>::Span(Span& other)
: m_data(other.data())
, m_size(other.size())
{
}
template<typename T>
template<typename S>
requires(is_same_v<T, const S>)
Span<T>::Span(const Span<S>& other)
: m_data(other.data())
, m_size(other.size())
{
}
template<typename T>
T& Span<T>::operator[](size_type index)
{

View File

@ -21,8 +21,8 @@ namespace Kernel
const uint8_t* glyph(uint32_t) const;
private:
static BAN::ErrorOr<Font> parse_psf1(const BAN::Span<uint8_t>);
static BAN::ErrorOr<Font> parse_psf2(const BAN::Span<uint8_t>);
static BAN::ErrorOr<Font> parse_psf1(BAN::Span<const uint8_t>);
static BAN::ErrorOr<Font> parse_psf2(BAN::Span<const uint8_t>);
private:
BAN::HashMap<uint32_t, uint32_t> m_glyph_offsets;

View File

@ -31,7 +31,7 @@ namespace Kernel
BAN::ErrorOr<Font> Font::prefs()
{
size_t font_data_size = _binary_font_prefs_psf_end - _binary_font_prefs_psf_start;
BAN::Span<uint8_t> font_data(_binary_font_prefs_psf_start, font_data_size);
BAN::Span<const uint8_t> font_data(_binary_font_prefs_psf_start, font_data_size);
return parse_psf1(font_data);
}
@ -57,8 +57,7 @@ namespace Kernel
return BAN::Error::from_c_string("Unsupported font format");
}
BAN::ErrorOr<Font> Font::parse_psf1(const BAN::Span<uint8_t> font_data)
BAN::ErrorOr<Font> Font::parse_psf1(BAN::Span<const uint8_t> font_data)
{
if (font_data.size() < 4)
return BAN::Error::from_c_string("Font file is too small");
@ -139,7 +138,7 @@ namespace Kernel
return result;
}
BAN::ErrorOr<Font> Font::parse_psf2(const BAN::Span<uint8_t> font_data)
BAN::ErrorOr<Font> Font::parse_psf2(BAN::Span<const uint8_t> font_data)
{
struct PSF2Header
{

View File

@ -40,7 +40,7 @@ namespace Kernel
BAN::LittleEndian<uint64_t> ending_lba;
BAN::LittleEndian<uint64_t> attributes;
BAN::LittleEndian<uint16_t> partition_name[36];
} __attribute__((packed));
};
static uint32_t crc32_table[256] =
{
@ -167,7 +167,6 @@ namespace Kernel
for (uint32_t i = 0; i < header.partition_entry_count; i++)
{
const PartitionEntry& entry = *(const PartitionEntry*)(entry_array.data() + header.partition_entry_size * i);
ASSERT((uintptr_t)&entry % 2 == 0);
char utf8_name[36 * 4 + 1];
BAN::UTF8::from_codepoints(entry.partition_name, 36, utf8_name);