#ifndef MBGL_MAP_TILE_DATA #define MBGL_MAP_TILE_DATA #include #include #include #include #include #include #include #include #include namespace mbgl { class Map; class Painter; class SourceInfo; class StyleLayer; namespace platform { class Request; } class TileData : public std::enable_shared_from_this, private util::noncopyable { public: struct exception : std::exception {}; struct geometry_too_long_exception : exception {}; public: typedef std::shared_ptr Ptr; enum class State { invalid, initial, loading, loaded, parsed, obsolete }; public: TileData(Tile::ID id, Map &map, const SourceInfo &source); ~TileData(); void request(); void cancel(); void reparse(); const std::string toString() const; inline bool ready() const { return state == State::parsed; } // Override this in the child class. virtual void beforeParse(); virtual void parse() = 0; virtual void afterParse(); virtual void render(Painter &painter, std::shared_ptr layer_desc, const mat4 &matrix) = 0; virtual bool hasData(std::shared_ptr layer_desc) const = 0; public: const Tile::ID id; std::atomic state; protected: Map ↦ public: const SourceInfo &source; protected: std::weak_ptr req; std::string data; // Contains the tile ID string for painting debug information. DebugFontBuffer debugFontBuffer; public: DebugBucket debugBucket; }; } #endif