File indexing completed on 2024-05-05 07:55:48
0001 /* 0002 SPDX-FileCopyrightText: 2021 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #ifndef ISOCODESCACHE_P_H 0008 #define ISOCODESCACHE_P_H 0009 0010 #include "mapentry_p.h" 0011 0012 #include <QByteArray> 0013 #include <QStringView> 0014 0015 #include <cstdint> 0016 #include <memory> 0017 #include <vector> 0018 0019 class QFile; 0020 0021 /** Cache for iso-codes JSON data. */ 0022 class IsoCodesCache 0023 { 0024 public: 0025 ~IsoCodesCache(); 0026 0027 static IsoCodesCache *instance(); 0028 0029 void loadIso3166_1(); 0030 void loadIso3166_2(); 0031 0032 uint32_t countryCount() const; 0033 const MapEntry<uint16_t> *countryNameMapBegin() const; 0034 inline const MapEntry<uint16_t> *countryNameMapEnd() const 0035 { 0036 return countryNameMapBegin() + countryCount(); 0037 } 0038 const MapEntry<uint16_t> *countryAlpha3MapBegin() const; 0039 inline const MapEntry<uint16_t> *countryAlpha3MapEnd() const 0040 { 0041 return countryAlpha3MapBegin() + countryCount(); 0042 } 0043 const char *countryStringTableLookup(uint16_t offset) const; 0044 0045 uint32_t subdivisionCount() const; 0046 const MapEntry<uint32_t> *subdivisionNameMapBegin() const; 0047 inline const MapEntry<uint32_t> *subdivisionNameMapEnd() const 0048 { 0049 return subdivisionNameMapBegin() + subdivisionCount(); 0050 } 0051 uint32_t subdivisionHierachyMapSize() const; 0052 const MapEntry<uint32_t> *subdivisionParentMapBegin() const; 0053 inline const MapEntry<uint32_t> *subdivisionParentMapEnd() const 0054 { 0055 return subdivisionParentMapBegin() + subdivisionHierachyMapSize(); 0056 } 0057 const char *subdivisionStringTableLookup(uint16_t offset) const; 0058 0059 static void createIso3166_1Cache(const QString &isoCodesPath, const QString &cacheFilePath); 0060 static void createIso3166_2Cache(const QString &isoCodesPath, const QString &cacheFilePath); 0061 0062 private: 0063 bool loadIso3166_1Cache(); 0064 bool loadIso3166_2Cache(); 0065 0066 std::unique_ptr<QFile> m_iso3166_1CacheFile; 0067 const uint8_t *m_iso3166_1CacheData = nullptr; 0068 std::size_t m_iso3166_1CacheSize = 0; 0069 std::unique_ptr<QFile> m_iso3166_2CacheFile; 0070 const uint8_t *m_iso3166_2CacheData = nullptr; 0071 std::size_t m_iso3166_2CacheSize = 0; 0072 }; 0073 0074 #endif // ISOCODESCACHE_H