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