1 #pragma once
2 
3 #include <mbgl/style/sources/custom_geometry_source.hpp>
4 #include <mbgl/tile/tile_id.hpp>
5 #include <mbgl/util/geojson.hpp>
6 #include <mbgl/actor/actor_ref.hpp>
7 
8 #include <map>
9 
10 namespace mbgl {
11 
12 class CustomGeometryTile;
13 
14 namespace style {
15 
16 class CustomTileLoader : private util::noncopyable {
17 public:
18 
19     using OverscaledIDFunctionTuple = std::tuple<uint8_t, int16_t, ActorRef<CustomGeometryTile>>;
20 
21     CustomTileLoader(const TileFunction& fetchTileFn, const TileFunction& cancelTileFn);
22 
23     void fetchTile(const OverscaledTileID& tileID, ActorRef<CustomGeometryTile> tileRef);
24     void cancelTile(const OverscaledTileID& tileID);
25 
26     void removeTile(const OverscaledTileID& tileID);
27     void setTileData(const CanonicalTileID& tileID, const GeoJSON& data);
28 
29     void invalidateTile(const CanonicalTileID&);
30     void invalidateRegion(const LatLngBounds&, Range<uint8_t>);
31 
32 private:
33     void invokeTileFetch(const CanonicalTileID& tileID);
34     void invokeTileCancel(const CanonicalTileID& tileID);
35 
36     TileFunction fetchTileFunction;
37     TileFunction cancelTileFunction;
38     std::unordered_map<CanonicalTileID, std::vector<OverscaledIDFunctionTuple>> tileCallbackMap;
39     // Keep around a cache of tile data to serve back for wrapped and over-zooomed tiles
40     std::map<CanonicalTileID, std::unique_ptr<GeoJSON>> dataCache;
41 
42 };
43 
44 } // namespace style
45 } // namespace mbgl
46