#pragma once #include #include #include #include #include #include namespace mbgl { namespace style { using SetTileDataFunction = std::function; class CustomTileLoader : private util::noncopyable { public: using OverscaledIDFunctionTuple = std::tuple>; CustomTileLoader(const TileFunction& fetchTileFn, const TileFunction& cancelTileFn); void fetchTile(const OverscaledTileID& tileID, ActorRef callbackRef); 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; }; } // namespace style } // namespace mbgl