summaryrefslogtreecommitdiff
path: root/include/mbgl/util/clip_ids.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/mbgl/util/clip_ids.hpp')
-rw-r--r--include/mbgl/util/clip_ids.hpp25
1 files changed, 22 insertions, 3 deletions
diff --git a/include/mbgl/util/clip_ids.hpp b/include/mbgl/util/clip_ids.hpp
index 748d3d8f5f..5855b16af7 100644
--- a/include/mbgl/util/clip_ids.hpp
+++ b/include/mbgl/util/clip_ids.hpp
@@ -4,15 +4,34 @@
#include <mbgl/map/tile.hpp>
#include <list>
#include <set>
+#include <vector>
+#include <forward_list>
#include <map>
namespace mbgl {
-static constexpr uint8_t clipMask[9] { 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFF };
+class ClipIDGenerator {
+private:
+ struct Leaf {
+ Leaf(Tile &tile);
+ void add(const Tile::ID &p);
+ bool operator==(const Leaf &other) const;
-void updateClipIDs(const std::list<Tile *> &array);
+ Tile &tile;
+ std::forward_list<Tile::ID> children;
+ };
+
+ typedef std::vector<Leaf> Pool;
+ std::forward_list<Pool> pools;
+ uint8_t bit_offset = 0;
+
+private:
+ bool reuseExisting(Leaf &leaf);
+
+public:
+ void update(std::forward_list<Tile *> tiles);
+};
-std::map<Tile::ID, ClipID> computeClipIDs(std::forward_list<Tile::ID> array);
}