1 #pragma once 2 3 #include <mbgl/tile/tile_id.hpp> 4 #include <mbgl/util/geometry.hpp> 5 #include <mbgl/util/constants.hpp> 6 #include <mbgl/util/optional.hpp> 7 8 #include <map> 9 #include <set> 10 #include <vector> 11 #include <string> 12 #include <memory> 13 #include <unordered_set> 14 15 namespace mbgl { 16 17 class SymbolInstance; 18 class RenderSymbolLayer; 19 class SymbolBucket; 20 21 class IndexedSymbolInstance { 22 public: IndexedSymbolInstance(uint32_t crossTileID_,Point<int64_t> coord_)23 IndexedSymbolInstance(uint32_t crossTileID_, Point<int64_t> coord_) 24 : crossTileID(crossTileID_), coord(coord_) 25 {} 26 27 uint32_t crossTileID; 28 Point<int64_t> coord; 29 }; 30 31 class TileLayerIndex { 32 public: 33 TileLayerIndex(OverscaledTileID coord, std::vector<SymbolInstance>&, uint32_t bucketInstanceId); 34 35 Point<int64_t> getScaledCoordinates(SymbolInstance&, const OverscaledTileID&); 36 void findMatches(std::vector<SymbolInstance>&, const OverscaledTileID&, std::set<uint32_t>&); 37 38 OverscaledTileID coord; 39 uint32_t bucketInstanceId; 40 std::map<std::u16string,std::vector<IndexedSymbolInstance>> indexedSymbolInstances; 41 }; 42 43 class CrossTileSymbolLayerIndex { 44 public: 45 CrossTileSymbolLayerIndex(); 46 bool addBucket(const OverscaledTileID&, SymbolBucket&, uint32_t& maxCrossTileID); 47 bool removeStaleBuckets(const std::unordered_set<uint32_t>& currentIDs); 48 void handleWrapJump(float newLng); 49 private: 50 void removeBucketCrossTileIDs(uint8_t zoom, const TileLayerIndex& removedBucket); 51 52 std::map<uint8_t, std::map<OverscaledTileID,TileLayerIndex>> indexes; 53 std::map<uint8_t, std::set<uint32_t>> usedCrossTileIDs; 54 float lng = 0; 55 }; 56 57 class CrossTileSymbolIndex { 58 public: 59 CrossTileSymbolIndex(); 60 61 bool addLayer(RenderSymbolLayer&, float lng); 62 void pruneUnusedLayers(const std::set<std::string>&); 63 64 void reset(); 65 private: 66 std::map<std::string, CrossTileSymbolLayerIndex> layerIndexes; 67 uint32_t maxCrossTileID = 0; 68 uint32_t maxBucketInstanceId = 0; 69 }; 70 71 } // namespace mbgl 72