#pragma once #include #include #include #include #include #include #include #include #include namespace mbgl { class GeometryTileData; class FeatureIndex; class CollisionTile; namespace style { class Style; class Layer; class UpdateParameters; } // namespace style class GeometryTile : public Tile { public: GeometryTile(const OverscaledTileID&, std::string sourceID, const style::UpdateParameters&); ~GeometryTile() override; void setError(std::exception_ptr); void setData(std::unique_ptr); void setPlacementConfig(const PlacementConfig&) override; void symbolDependenciesChanged() override; void redoLayout() override; Bucket* getBucket(const style::Layer&) override; void queryRenderedFeatures( std::unordered_map>& result, const GeometryCoordinates& queryGeometry, const TransformState&, const optional>& layerIDs) override; void cancel() override; class LayoutResult { public: std::unordered_map> buckets; std::unique_ptr featureIndex; std::unique_ptr tileData; uint64_t correlationID; }; void onLayout(LayoutResult); class PlacementResult { public: std::unordered_map> buckets; std::unique_ptr collisionTile; uint64_t correlationID; }; void onPlacement(PlacementResult); void onError(std::exception_ptr); private: const std::string sourceID; style::Style& style; // Used to signal the worker that it should abandon parsing this tile as soon as possible. std::atomic obsolete { false }; std::shared_ptr mailbox; Actor worker; uint64_t correlationID = 0; optional requestedConfig; std::unordered_map> buckets; std::unique_ptr featureIndex; std::unique_ptr data; }; } // namespace mbgl