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