#pragma once #include #include #include #include #include #include #include #include #include #include namespace mbgl { class SymbolInstance; class RenderSymbolLayer; class SymbolBucket; class IndexedSymbolInstance { public: IndexedSymbolInstance(uint32_t crossTileID_, Point coord_) : crossTileID(crossTileID_), coord(coord_) {} uint32_t crossTileID; Point coord; }; class TileLayerIndex { public: TileLayerIndex(OverscaledTileID coord, std::vector&, uint32_t bucketInstanceId); Point getScaledCoordinates(SymbolInstance&, const OverscaledTileID&); void findMatches(std::vector&, const OverscaledTileID&, std::set&); OverscaledTileID coord; uint32_t bucketInstanceId; std::map> indexedSymbolInstances; }; class CrossTileSymbolLayerIndex { public: CrossTileSymbolLayerIndex(); bool addBucket(const OverscaledTileID&, SymbolBucket&, uint32_t& maxCrossTileID); bool removeStaleBuckets(const std::unordered_set& currentIDs); private: void removeBucketCrossTileIDs(uint8_t zoom, const TileLayerIndex& removedBucket); std::map> indexes; std::map> usedCrossTileIDs; }; class CrossTileSymbolIndex { public: CrossTileSymbolIndex(); bool addLayer(RenderSymbolLayer&); void reset(); private: std::map layerIndexes; uint32_t maxCrossTileID = 0; uint32_t maxBucketInstanceId = 0; }; } // namespace mbgl