diff options
Diffstat (limited to 'src/mbgl/tile/tile_id.hpp')
-rw-r--r-- | src/mbgl/tile/tile_id.hpp | 10 |
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; |