C
Qt Quick Ultralite map example
// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial
#pragma once
#include <qul/maptilefetcher.h>
#include <qul/private/filecache.h>
#include <string>
#include <unordered_map>
#include <list>
namespace Qul {
namespace Private {
class FileCache;
} // namespace Private
} // namespace Qul
class OfflineTileFetcher : public Qul::MapTileFetcher
{
typedef std::basic_string<char, std::char_traits<char>, Qul::PlatformInterface::Allocator<char> > QulString;
struct CustomHash
{
std::size_t operator()(const QulString &s) const
{
std::size_t hash = 0;
for (size_t i = 0; i < s.size(); ++i) {
hash = hash * 31 + s.at(i); // A simple hash function
}
return hash;
}
};
typedef std::unordered_map<QulString,
Qul::SharedImage,
CustomHash,
std::equal_to<QulString>,
Qul::PlatformInterface::Allocator<std::pair<const QulString, Qul::SharedImage> > >
TileCacheMap;
typedef std::list<QulString, Qul::PlatformInterface::Allocator<QulString> > CacheOrderList;
public:
OfflineTileFetcher(bool useFileCache = true);
bool getTileImage(const Qul::Private::TileSpec &spec, Qul::Private::TileImage &tileImage) override;
private:
Qul::SharedImage findImage(const char *url);
void removeOldestImage();
TileCacheMap tileCache;
QulString generateTileUrl(const char *baseDir, const Qul::Private::TileSpec &spec) const;
Qul::Private::FileCache *m_fileCache;
CacheOrderList cacheOrder;
size_t maxCacheSize;
};