#ifndef MBGL_MAP_TILE_PARSER #define MBGL_MAP_TILE_PARSER #include #include #include #include #include #include namespace mbgl { class Style; class GlyphAtlas; class GlyphStore; class SpriteAtlas; class VectorTileData; class StyleLayer; class StyleLayerGroup; class StyleBucket; class StyleBucketFill; class StyleBucketLine; class StyleBucketIcon; class Bucket; 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); public: void parse(); private: bool obsolete() const; void parseGlyphs(); void parseStyleLayers(std::shared_ptr group); void addGlyph(uint64_t tileid, const std::string stackname, const std::u32string &string, const FontStack &fontStack, GlyphAtlas &glyphAtlas, GlyphPositions &face); 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 createLineBucket(const VectorTileLayer& layer, const FilterExpression &filter, const StyleBucketLine &line); std::unique_ptr createIconBucket(const VectorTileLayer& layer, const FilterExpression &filter, const StyleBucketIcon &icon); std::unique_ptr createTextBucket(const VectorTileLayer& layer, const FilterExpression &filter, const StyleBucketText &text); template void addBucketFeatures(Bucket& bucket, const VectorTileLayer& layer, const FilterExpression &filter); template void addBucketFeatures(Bucket& bucket, const VectorTileLayer& layer, const FilterExpression &filter, Args&& ...args); 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; Placement placement; }; } #endif