AK: Provide a default set of Traits for const types

This commit is contained in:
Tim Schumacher 2023-11-08 21:12:54 +01:00 committed by Tim Flynn
parent a2f60911fe
commit e9dda2a5f8
Notes: sideshowbarker 2024-07-17 09:49:48 +09:00
5 changed files with 22 additions and 29 deletions

View file

@ -125,21 +125,11 @@ struct Traits<LittleEndian<T>> : public DefaultTraits<LittleEndian<T>> {
static constexpr bool is_trivially_serializable() { return Traits<T>::is_trivially_serializable(); }
};
template<typename T>
struct Traits<LittleEndian<T> const> : public DefaultTraits<LittleEndian<T> const> {
static constexpr bool is_trivially_serializable() { return Traits<T>::is_trivially_serializable(); }
};
template<typename T>
struct Traits<BigEndian<T>> : public DefaultTraits<BigEndian<T>> {
static constexpr bool is_trivially_serializable() { return Traits<T>::is_trivially_serializable(); }
};
template<typename T>
struct Traits<BigEndian<T> const> : public DefaultTraits<BigEndian<T> const> {
static constexpr bool is_trivially_serializable() { return Traits<T>::is_trivially_serializable(); }
};
constexpr u16 bitswap(u16 v)
{
v = ((v >> 1) & 0x5555) | ((v & 0x5555) << 1); // even & odd bits

View file

@ -30,6 +30,11 @@ template<typename T>
struct Traits : public DefaultTraits<T> {
};
template<typename T>
struct Traits<T const> : public Traits<T> {
using PeekType = typename Traits<T>::ConstPeekType;
};
template<Integral T>
struct Traits<T> : public DefaultTraits<T> {
static constexpr bool is_trivial() { return true; }

View file

@ -43,10 +43,8 @@ static constexpr size_t s_max_range_mask_size = s_max_glyph_count / (256 * 8);
}
// FIXME: We define the traits for the const FontFileHeader, because that's the one we use, and defining
// Traits<T> doesn't apply to Traits<T const>. Once that's fixed, remove the const here.
template<>
class AK::Traits<Gfx::FontFileHeader const> : public DefaultTraits<Gfx::FontFileHeader const> {
class AK::Traits<Gfx::FontFileHeader> : public DefaultTraits<Gfx::FontFileHeader> {
public:
static constexpr bool is_trivially_serializable() { return true; }
};

View file

@ -55,19 +55,19 @@ static_assert(AssertSize<Version16Dot16, 4>());
namespace AK {
template<>
struct Traits<OpenType::Fixed const> : public DefaultTraits<OpenType::Fixed const> {
struct Traits<OpenType::Fixed> : public DefaultTraits<OpenType::Fixed> {
static constexpr bool is_trivially_serializable() { return true; }
};
template<>
struct Traits<OpenType::LongDateTime const> : public DefaultTraits<OpenType::LongDateTime const> {
struct Traits<OpenType::LongDateTime> : public DefaultTraits<OpenType::LongDateTime> {
static constexpr bool is_trivially_serializable() { return true; }
};
template<>
struct Traits<OpenType::Tag const> : public DefaultTraits<OpenType::Tag const> {
struct Traits<OpenType::Tag> : public DefaultTraits<OpenType::Tag> {
static constexpr bool is_trivially_serializable() { return true; }
};
template<>
struct Traits<OpenType::Version16Dot16 const> : public DefaultTraits<OpenType::Version16Dot16 const> {
struct Traits<OpenType::Version16Dot16> : public DefaultTraits<OpenType::Version16Dot16> {
static constexpr bool is_trivially_serializable() { return true; }
};
}

View file

@ -48,13 +48,13 @@ static_assert(AssertSize<TableRecord, 16>());
}
template<>
class AK::Traits<OpenType::TableDirectory const> : public DefaultTraits<OpenType::TableDirectory const> {
class AK::Traits<OpenType::TableDirectory> : public DefaultTraits<OpenType::TableDirectory> {
public:
static constexpr bool is_trivially_serializable() { return true; }
};
template<>
class AK::Traits<OpenType::TableRecord const> : public DefaultTraits<OpenType::TableRecord const> {
class AK::Traits<OpenType::TableRecord> : public DefaultTraits<OpenType::TableRecord> {
public:
static constexpr bool is_trivially_serializable() { return true; }
};
@ -788,47 +788,47 @@ private:
namespace AK {
template<>
struct Traits<OpenType::Kern::Header const> : public DefaultTraits<OpenType::Kern::Header const> {
struct Traits<OpenType::Kern::Header> : public DefaultTraits<OpenType::Kern::Header> {
static constexpr bool is_trivially_serializable() { return true; }
};
template<>
struct Traits<OpenType::Kern::SubtableHeader const> : public DefaultTraits<OpenType::Kern::SubtableHeader const> {
struct Traits<OpenType::Kern::SubtableHeader> : public DefaultTraits<OpenType::Kern::SubtableHeader> {
static constexpr bool is_trivially_serializable() { return true; }
};
template<>
struct Traits<OpenType::Kern::Format0 const> : public DefaultTraits<OpenType::Kern::Format0 const> {
struct Traits<OpenType::Kern::Format0> : public DefaultTraits<OpenType::Kern::Format0> {
static constexpr bool is_trivially_serializable() { return true; }
};
template<>
struct Traits<OpenType::Kern::Format0Pair const> : public DefaultTraits<OpenType::Kern::Format0Pair const> {
struct Traits<OpenType::Kern::Format0Pair> : public DefaultTraits<OpenType::Kern::Format0Pair> {
static constexpr bool is_trivially_serializable() { return true; }
};
template<>
struct Traits<OpenType::GPOS::Version1_0 const> : public DefaultTraits<OpenType::GPOS::Version1_0 const> {
struct Traits<OpenType::GPOS::Version1_0> : public DefaultTraits<OpenType::GPOS::Version1_0> {
static constexpr bool is_trivially_serializable() { return true; }
};
template<>
struct Traits<OpenType::FeatureList const> : public DefaultTraits<OpenType::FeatureList const> {
struct Traits<OpenType::FeatureList> : public DefaultTraits<OpenType::FeatureList> {
static constexpr bool is_trivially_serializable() { return true; }
};
template<>
struct Traits<OpenType::FeatureRecord const> : public DefaultTraits<OpenType::FeatureRecord const> {
struct Traits<OpenType::FeatureRecord> : public DefaultTraits<OpenType::FeatureRecord> {
static constexpr bool is_trivially_serializable() { return true; }
};
template<>
struct Traits<OpenType::LookupList const> : public DefaultTraits<OpenType::LookupList const> {
struct Traits<OpenType::LookupList> : public DefaultTraits<OpenType::LookupList> {
static constexpr bool is_trivially_serializable() { return true; }
};
template<>
struct Traits<OpenType::ScriptList const> : public DefaultTraits<OpenType::ScriptList const> {
struct Traits<OpenType::ScriptList> : public DefaultTraits<OpenType::ScriptList> {
static constexpr bool is_trivially_serializable() { return true; }
};
template<>
struct Traits<OpenType::ScriptRecord const> : public DefaultTraits<OpenType::ScriptRecord const> {
struct Traits<OpenType::ScriptRecord> : public DefaultTraits<OpenType::ScriptRecord> {
static constexpr bool is_trivially_serializable() { return true; }
};
}