summaryrefslogtreecommitdiff
path: root/include/mbgl/map/tile_data.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/mbgl/map/tile_data.hpp')
-rw-r--r--include/mbgl/map/tile_data.hpp77
1 files changed, 77 insertions, 0 deletions
diff --git a/include/mbgl/map/tile_data.hpp b/include/mbgl/map/tile_data.hpp
new file mode 100644
index 0000000000..a4b73c339f
--- /dev/null
+++ b/include/mbgl/map/tile_data.hpp
@@ -0,0 +1,77 @@
+#ifndef MBGL_MAP_TILE_DATA
+#define MBGL_MAP_TILE_DATA
+
+#include <mbgl/map/tile.hpp>
+#include <mbgl/util/noncopyable.hpp>
+#include <mbgl/platform/platform.hpp>
+#include <mbgl/geometry/vao.hpp>
+#include <mbgl/renderer/debug_bucket.hpp>
+
+#include <cstdint>
+#include <string>
+#include <memory>
+#include <atomic>
+
+namespace mbgl {
+
+class Map;
+class Painter;
+class StyleLayer;
+
+class TileData : public std::enable_shared_from_this<TileData>,
+ private util::noncopyable {
+public:
+ struct exception : std::exception {};
+ struct geometry_too_long_exception : exception {};
+
+public:
+ typedef std::shared_ptr<TileData> Ptr;
+
+ enum class State {
+ invalid,
+ initial,
+ loading,
+ loaded,
+ parsed,
+ obsolete
+ };
+
+public:
+ TileData(Tile::ID id, Map &map, const std::string url);
+ ~TileData();
+
+ void request();
+ void cancel();
+ void reparse();
+ const std::string toString() const;
+
+ // Override this in the child class.
+ virtual void beforeParse();
+ virtual void parse() = 0;
+ virtual void afterParse();
+ virtual void render(Painter &painter, std::shared_ptr<StyleLayer> layer_desc) = 0;
+ virtual bool hasData(std::shared_ptr<StyleLayer> layer_desc) const = 0;
+
+
+public:
+ const Tile::ID id;
+ std::atomic<State> state;
+
+protected:
+ Map &map;
+
+ // Request-related information.
+ const std::string url;
+ std::weak_ptr<platform::Request> req;
+ std::string data;
+
+ // Contains the tile ID string for painting debug information.
+ DebugFontBuffer debugFontBuffer;
+
+public:
+ DebugBucket debugBucket;
+};
+
+}
+
+#endif