Browse Source

AK: Provide a default set of Traits for `const` types

Tim Schumacher 1 year ago
parent
commit
e9dda2a5f8

+ 0 - 10
AK/Endian.h

@@ -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

+ 5 - 0
AK/Traits.h

@@ -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; }

+ 1 - 3
Userland/Libraries/LibGfx/Font/BitmapFont.cpp

@@ -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; }
 };

+ 4 - 4
Userland/Libraries/LibGfx/Font/OpenType/DataTypes.h

@@ -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; }
 };
 }

+ 12 - 12
Userland/Libraries/LibGfx/Font/OpenType/Tables.h

@@ -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; }
 };
 }