#ifndef MBGL_MAP_TILE_PARSER #define MBGL_MAP_TILE_PARSER #include #include #include #include #include #include #include namespace mbgl { class Bucket; class Texturepool; class FontStack; class GlyphAtlas; class GlyphStore; class SpriteAtlas; class Sprite; class Style; class StyleBucket; class StyleBucketFill; class StyleBucketRaster; class StyleBucketLine; class StyleBucketSymbol; class StyleLayerGroup; class VectorTileData; class Collision; class TileParser { public: TileParser(const std::string &data, VectorTileData &tile, const std::shared_ptr &style, const std::shared_ptr &glyphAtlas, const std::shared_ptr &glyphStore, const std::shared_ptr &spriteAtlas, const std::shared_ptr &sprite); ~TileParser(); public: void parse(); private: bool obsolete() const; void parseStyleLayers(std::shared_ptr group); std::unique_ptr createBucket(std::shared_ptr bucket_desc); std::unique_ptr createFillBucket(const VectorTileLayer& layer, const FilterExpression &filter, const StyleBucketFill &fill); std::unique_ptr createRasterBucket(const std::shared_ptr &texturepool, const StyleBucketRaster &raster); std::unique_ptr createLineBucket(const VectorTileLayer& layer, const FilterExpression &filter, const StyleBucketLine &line); std::unique_ptr createSymbolBucket(const VectorTileLayer& layer, const FilterExpression &filter, const StyleBucketSymbol &symbol); template void addBucketGeometries(Bucket& bucket, const VectorTileLayer& layer, const FilterExpression &filter); private: const VectorTile vector_data; VectorTileData& tile; // Cross-thread shared data. std::shared_ptr style; std::shared_ptr glyphAtlas; std::shared_ptr glyphStore; std::shared_ptr spriteAtlas; std::shared_ptr sprite; std::shared_ptr texturePool; std::unique_ptr collision; }; } #endif