#ifndef LLMR_MAP_TILE_DATA #define LLMR_MAP_TILE_DATA #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace llmr { class Map; class Raster; class LayerDescription; class BucketDescription; class PlainShader; 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 std::string url, const bool is_raster); ~TileData(); void request(); void scheduleParsing(); void parse(); void cancel(); const std::string toString() const; public: const Tile::ID id; std::atomic state; std::shared_ptr raster; // Holds the actual geometries in this tile. DebugFontBuffer debugFontBuffer; VertexArrayObject debugFontArray; FillVertexBuffer fillVertexBuffer; LineVertexBuffer lineVertexBuffer; PointVertexBuffer pointVertexBuffer; TextVertexBuffer textVertexBuffer; TriangleElementsBuffer triangleElementsBuffer; LineElementsBuffer lineElementsBuffer; PointElementsBuffer pointElementsBuffer; // Holds the buckets of this tile. // They contain the location offsets in the buffers stored above std::map> buckets; private: const std::string url; const bool is_raster = false; std::string data; Map ↦ // Stores a request that is in progress. std::weak_ptr req; }; } #endif