#ifndef MBGL_MAP_TILE_DATA #define MBGL_MAP_TILE_DATA #include #include #include #include #include #include #include #include #include #include namespace uv { class worker; } typedef struct uv_loop_s uv_loop_t; namespace mbgl { class Map; class FileSource; class Painter; class SourceInfo; class StyleLayer; 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 util::ptr Ptr; enum class State { invalid, initial, loading, loaded, parsed, obsolete }; public: TileData(Tile::ID const& id, const SourceInfo&, FileSource&); ~TileData(); void request(uv::worker&, uv_loop_t&, float pixelRatio, std::function callback); void reparse(uv::worker&, std::function callback); void cancel(); const std::string toString() const; inline bool ready() const { return state == State::parsed; } // Override this in the child class. virtual void parse() = 0; virtual void render(Painter &painter, util::ptr layer_desc, const mat4 &matrix) = 0; virtual bool hasData(StyleLayer const& layer_desc) const = 0; public: const Tile::ID id; const std::string name; std::atomic state; public: const SourceInfo& source; FileSource& fileSource; protected: Request *req = nullptr; std::string data; // Contains the tile ID string for painting debug information. DebugFontBuffer debugFontBuffer; public: DebugBucket debugBucket; }; } #endif