File indexing completed on 2024-06-23 05:13:12
0001 /* 0002 SPDX-FileCopyrightText: 2023 Volker Krause <vkrause@kde.org> 0003 SPDX-License-Identifier: LGPL-2.0-or-later 0004 */ 0005 0006 #ifndef KITINERARY_PLISTDATA_P_H 0007 #define KITINERARY_PLISTDATA_P_H 0008 0009 #include <QtEndian> 0010 0011 #include <cstdint> 0012 0013 namespace KItinerary { 0014 0015 enum class PListObjectType { 0016 Null, 0017 Bool, 0018 Url, 0019 Uuid, 0020 Fill, 0021 Int, 0022 Real, 0023 Date, 0024 Data, 0025 String, 0026 Uid, 0027 Array, 0028 Ordset, 0029 Set, 0030 Dict, 0031 Unused 0032 }; 0033 0034 #pragma pack(push) 0035 #pragma pack(1) 0036 0037 template <typename T> 0038 struct PListBigEndianNumber { 0039 public: 0040 operator T() const { 0041 if constexpr (std::is_same_v<T, uint64_t>) 0042 return qFromBigEndian((quint64)m_value); 0043 else 0044 return qFromBigEndian(m_value); 0045 } 0046 private: 0047 T m_value; 0048 }; 0049 0050 constexpr inline const char PListMagic[] = "bplist"; 0051 constexpr inline std::size_t PListMagicSize = 6; 0052 0053 struct PListHeader { 0054 uint8_t magic[PListMagicSize]; 0055 uint8_t version[2]; 0056 }; 0057 0058 constexpr inline uint8_t PListContainerTypeMask = 0b1111'0000; 0059 constexpr inline uint8_t PListContainerSizeMask = 0b0000'1111; 0060 0061 constexpr inline uint8_t PListFalse = 0b000'1000; 0062 constexpr inline uint8_t PListTrue = 0b000'1001; 0063 0064 struct PListTrailer { 0065 PListBigEndianNumber<uint8_t> offsetIntSize; 0066 PListBigEndianNumber<uint8_t> objectRefSize; 0067 PListBigEndianNumber<uint64_t> numObjects; 0068 PListBigEndianNumber<uint64_t> rootObjectIndex; 0069 PListBigEndianNumber<uint64_t> offsetTableOffset; 0070 }; 0071 0072 #pragma pack(pop) 0073 0074 } 0075 0076 #endif 0077