#ifndef LLMR_MAP_TILE #define LLMR_MAP_TILE #include "../geometry/debug_font_buffer.hpp" #include "../geometry/linevertexbuffer.hpp" #include "../geometry/fill_buffer.hpp" #include "layer.hpp" #include #include #include #include #include #include namespace llmr { struct pbf; class Style; class Bucket; class LayerDescription; class BucketDescription; class Tile { public: struct exception : std::exception {}; struct geometry_too_long_exception : exception {}; public: typedef std::shared_ptr Ptr; typedef vec3 ID; enum state { initial, loading, ready, obsolete }; public: Tile(ID id, const Style& style); ~Tile(); // Make noncopyable Tile(const Tile&) = delete; Tile(const Tile&&) = delete; Tile& operator=(const Tile&) = delete; Tile& operator=(const Tile && ) = delete; // Other functions void setData(uint8_t *data, uint32_t bytes); bool parse(); void parseLayers(const pbf& tile, const std::vector& layers); std::shared_ptr createBucket(const pbf& tile, const BucketDescription& bucket_desc); // void parseLayer(const pbf layer); // void (const std::vector& child_layers); std::shared_ptr createFillBucket(const pbf data, const BucketDescription& bucket_desc); void cancel(); const std::string toString() const; static ID parent(const ID& id, int32_t z); static std::forward_list children(const ID& id, int32_t z); public: const ID id; state state; // Holds the actual geometries in this tile. std::shared_ptr lineVertex; std::shared_ptr debugFontVertex; std::shared_ptr fillBuffer; // Holds the buckets of this tile. // They contain the location offsets in the buffers stored above std::map> buckets; // std::forward_list layers; private: // Source data uint8_t *data; uint32_t bytes; std::mutex mtx; const Style& style; }; } #endif