#ifndef MBGL_MAP_TILE_PARSER #define MBGL_MAP_TILE_PARSER #include #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 : private util::noncopyable { public: TileParser(const std::string &data, VectorTileData &tile, const util::ptr &style, GlyphAtlas & glyphAtlas, const util::ptr &glyphStore, SpriteAtlas & spriteAtlas, const util::ptr &sprite); ~TileParser(); public: void parse(); private: bool obsolete() const; void parseStyleLayers(util::ptr group); std::unique_ptr createBucket(util::ptr bucket_desc); std::unique_ptr createFillBucket(const VectorTileLayer& layer, const FilterExpression &filter, const StyleBucketFill &fill); std::unique_ptr createRasterBucket(const util::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. util::ptr style; GlyphAtlas & glyphAtlas; util::ptr glyphStore; SpriteAtlas & spriteAtlas; util::ptr sprite; util::ptr texturePool; std::unique_ptr collision; }; } #endif