1#pragma once
2
3#include <mbgl/storage/response.hpp>
4#include <mbgl/util/optional.hpp>
5#include <mbgl/util/font_stack.hpp>
6#include <mbgl/util/tileset.hpp>
7#include <mbgl/util/util.hpp>
8#include <mbgl/util/traits.hpp>
9
10#include <string>
11
12namespace mbgl {
13
14class Resource {
15public:
16 enum Kind : uint8_t {
17 Unknown = 0,
18 Style,
19 Source,
20 Tile,
21 Glyphs,
22 SpriteImage,
23 SpriteJSON,
24 Image
25 };
26
27 struct TileData {
28 std::string urlTemplate;
29 uint8_t pixelRatio;
30 int32_t x;
31 int32_t y;
32 int8_t z;
33 };
34
35 enum class LoadingMethod : uint8_t {
36 None = 0b00,
37 Cache = 0b01,
38 Network = 0b10,
39
40 CacheOnly = Cache,
41 NetworkOnly = Network,
42 All = Cache | Network,
43 };
44
45 Resource(Kind kind_,
46 std::string url_,
47 optional<TileData> tileData_ = {},
48 LoadingMethod loadingMethod_ = LoadingMethod::All)
49 : kind(kind_),
50 loadingMethod(loadingMethod_),
51 url(std::move(url_)),
52 tileData(std::move(tileData_)) {
53 }
54
55 bool hasLoadingMethod(LoadingMethod method);
56
57 static Resource style(const std::string& url);
58 static Resource source(const std::string& url);
59 static Resource tile(const std::string& urlTemplate,
60 float pixelRatio,
61 int32_t x,
62 int32_t y,
63 int8_t z,
64 Tileset::Scheme scheme,
65 LoadingMethod = LoadingMethod::All);
66 static Resource glyphs(const std::string& urlTemplate,
67 const FontStack& fontStack,
68 const std::pair<uint16_t, uint16_t>& glyphRange);
69 static Resource spriteImage(const std::string& base, float pixelRatio);
70 static Resource spriteJSON(const std::string& base, float pixelRatio);
71 static Resource image(const std::string& url);
72
73 Kind kind;
74 LoadingMethod loadingMethod;
75 std::string url;
76
77 // Includes auxiliary data if this is a tile request.
78 optional<TileData> tileData;
79
80 optional<Timestamp> priorModified = {};
81 optional<Timestamp> priorExpires = {};
82 optional<std::string> priorEtag = {};
83 std::shared_ptr<const std::string> priorData;
84};
85
86
87MBGL_CONSTEXPR Resource::LoadingMethod operator|(Resource::LoadingMethod a, Resource::LoadingMethod b) {
88 return Resource::LoadingMethod(mbgl::underlying_type(t: a) | mbgl::underlying_type(t: b));
89}
90
91MBGL_CONSTEXPR Resource::LoadingMethod& operator|=(Resource::LoadingMethod& a, Resource::LoadingMethod b) {
92 return (a = a | b);
93}
94
95MBGL_CONSTEXPR Resource::LoadingMethod operator&(Resource::LoadingMethod a, Resource::LoadingMethod b) {
96 return Resource::LoadingMethod(mbgl::underlying_type(t: a) & mbgl::underlying_type(t: b));
97}
98
99inline bool Resource::hasLoadingMethod(Resource::LoadingMethod method) {
100 return (loadingMethod & method) != Resource::LoadingMethod::None;
101}
102
103} // namespace mbgl
104

source code of qtlocation/src/3rdparty/mapbox-gl-native/include/mbgl/storage/resource.hpp