#pragma once #include #include #include #include #include #include namespace mbgl { class CustomGeometryTile; namespace style { class CustomTileLoader { public: CustomTileLoader(const CustomTileLoader&) = delete; CustomTileLoader& operator=(const CustomTileLoader&) = delete; using OverscaledIDFunctionTuple = std::tuple>; CustomTileLoader(const TileFunction& fetchTileFn, const TileFunction& cancelTileFn); void fetchTile(const OverscaledTileID& tileID, const ActorRef& tileRef); void cancelTile(const OverscaledTileID& tileID); void removeTile(const OverscaledTileID& tileID); void setTileData(const CanonicalTileID& tileID, const GeoJSON& data); void invalidateTile(const CanonicalTileID&); void invalidateRegion(const LatLngBounds&, Range); private: void invokeTileFetch(const CanonicalTileID& tileID); void invokeTileCancel(const CanonicalTileID& tileID); TileFunction fetchTileFunction; TileFunction cancelTileFunction; std::unordered_map> tileCallbackMap; // Keep around a cache of tile data to serve back for wrapped and over-zooomed tiles std::map> dataCache; std::mutex dataMutex; }; } // namespace style } // namespace mbgl