summaryrefslogtreecommitdiff
path: root/src/mbgl/tile/tile_id.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/tile/tile_id.hpp')
-rw-r--r--src/mbgl/tile/tile_id.hpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/mbgl/tile/tile_id.hpp b/src/mbgl/tile/tile_id.hpp
index 1ce3eea98e..38adbaa107 100644
--- a/src/mbgl/tile/tile_id.hpp
+++ b/src/mbgl/tile/tile_id.hpp
@@ -28,6 +28,7 @@ public:
bool operator<(const CanonicalTileID&) const;
bool isChildOf(const CanonicalTileID&) const;
CanonicalTileID scaledTo(uint8_t z) const;
+ CanonicalTileID operator-(const CanonicalTileID&) const;
std::array<CanonicalTileID, 4> children() const;
const uint8_t z;
@@ -125,6 +126,15 @@ inline CanonicalTileID CanonicalTileID::scaledTo(uint8_t targetZ) const {
}
}
+inline CanonicalTileID CanonicalTileID::operator-(const CanonicalTileID& rhs) const {
+ if (!isChildOf(rhs)) {
+ return { 0, 0, 0 };
+ } else {
+ const uint8_t diffZ = z - rhs.z;
+ return { diffZ, x - (rhs.x << diffZ), y - (rhs.y << diffZ) };
+ }
+}
+
inline std::array<CanonicalTileID, 4> CanonicalTileID::children() const {
const uint8_t childZ = z + 1;
const uint32_t childX = x * 2;