#ifndef MBGL_MAP_SOURCE #define MBGL_MAP_SOURCE #include #include #include #include #include #include #include #include namespace mapbox { namespace geojsonvt { class GeoJSONVT; } // namespace geojsonvt } // namespace mapbox namespace mbgl { class StyleUpdateParameters; class Painter; class FileSource; class FileRequest; class TransformState; class Tile; struct ClipID; struct box; class Source : private util::noncopyable { public: class Observer { public: virtual ~Observer() = default; virtual void onSourceLoaded(Source&) {}; virtual void onSourceError(Source&, std::exception_ptr) {}; virtual void onTileLoaded(Source&, const TileID&, bool /* isNewTile */) {}; virtual void onTileError(Source&, const TileID&, std::exception_ptr) {}; virtual void onPlacementRedone() {}; }; Source(SourceType, const std::string& id, const std::string& url, uint16_t tileSize, std::unique_ptr&&, std::unique_ptr&&); ~Source(); bool loaded = false; void load(FileSource&); bool isLoading() const; bool isLoaded() const; const SourceInfo* getInfo() const { return info.get(); } // Request or parse all the tiles relevant for the "TransformState". This method // will return true if all the tiles were scheduled for updating of false if // they were not. shouldReparsePartialTiles must be set to "true" if there is // new data available that a tile in the "partial" state might be interested at. bool update(const StyleUpdateParameters&); void updateMatrices(const mat4 &projMatrix, const TransformState &transform); void finishRender(Painter &painter); std::forward_list getLoadedTiles() const; const std::vector& getTiles() const; void setCacheSize(size_t); void onLowMemory(); void setObserver(Observer* observer); void dumpDebugLogs() const; const SourceType type; const std::string id; const std::string url; uint16_t tileSize = util::tileSize; bool enabled = false; private: void tileLoadingCallback(const TileID&, std::exception_ptr, bool isNewTile); bool handlePartialTile(const TileID&); bool findLoadedChildren(const TileID&, int32_t maxCoveringZoom, std::vector& retain); void findLoadedParent(const TileID&, int32_t minCoveringZoom, std::vector& retain); TileData::State addTile(const TileID&, const StyleUpdateParameters&); TileData::State hasTile(const TileID&); void updateTilePtrs(); private: std::unique_ptr info; std::unique_ptr geojsonvt; // Stores the time when this source was most recently updated. TimePoint updated = TimePoint::min(); std::map> tiles; std::vector tilePtrs; std::map> tileDataMap; TileCache cache; std::unique_ptr req; Observer nullObserver; Observer* observer = &nullObserver; }; } // namespace mbgl #endif