9 #include <forward_list>
16 class OverscaledTileID;
17 class CanonicalTileID;
18 class UnwrappedTileID;
32 std::array<CanonicalTileID, 4>
children()
const;
39 ::std::ostream&
operator<<(::std::ostream& os,
const CanonicalTileID& rhs);
69 ::std::ostream&
operator<<(::std::ostream& os,
const OverscaledTileID& rhs);
86 std::array<UnwrappedTileID, 4>
children()
const;
95 ::std::ostream&
operator<<(::std::ostream& os,
const UnwrappedTileID& rhs);
102 assert(
x < (1ull <<
z));
103 assert(
y < (1ull <<
z));
107 return z == rhs.
z &&
x == rhs.
x &&
y == rhs.
y;
111 return z != rhs.
z ||
x != rhs.
x ||
y != rhs.
y;
115 return std::tie(
z,
x,
y) < std::tie(rhs.
z, rhs.
x, rhs.
y);
120 return parent.
z == 0 ||
121 (parent.
z <
z && parent.
x == (
x >> (
z - parent.
z)) && parent.
y == (
y >> (
z - parent.
z)));
126 return { targetZ,
x >> (
z - targetZ),
y >> (
z - targetZ) };
128 return { targetZ,
x << (targetZ -
z),
y << (targetZ -
z) };
133 const uint8_t childZ =
z + 1;
134 const uint32_t childX =
x * 2;
135 const uint32_t childY =
y * 2;
137 { childZ, childX, childY },
138 { childZ, childX, childY + 1 },
139 { childZ, childX + 1, childY },
140 { childZ, childX + 1, childY + 1 },
145 : overscaledZ(overscaledZ_),
wrap(wrap_), canonical(canonical_) {
150 : overscaledZ(overscaledZ_),
wrap(wrap_), canonical(z, x, y) {
155 : overscaledZ(z),
wrap(0), canonical(z, x, y) {
159 : overscaledZ(canonical_.z),
wrap(0), canonical(canonical_) {
203 :
wrap(static_cast<int16_t>((x_ < 0 ? x_ - (1ll << z_) + 1 : x_) / (1ll << z_))),
206 static_cast<uint32_t>(x_ -
wrap * (1ll << z_)),
207 y_ < 0 ? 0 :
std::
min(static_cast<uint32_t>(y_), static_cast<uint32_t>(1ull << z_) - 1)) {
211 :
wrap(wrap_), canonical(canonical_) {}
238 {
wrap, { childZ, childX, childY } },
239 {
wrap, { childZ, childX, childY + 1 } },
240 {
wrap, { childZ, childX + 1, childY } },
241 {
wrap, { childZ, childX + 1, childY + 1 } },
259 struct hash<
mbgl::CanonicalTileID> {
264 struct hash<
mbgl::UnwrappedTileID> {
269 struct hash<
mbgl::OverscaledTileID> {
CanonicalTileID scaledTo(uint8_t z) const
bool operator<(const CanonicalTileID &) const
bool operator==(const CanonicalTileID &) const
std::array< CanonicalTileID, 4 > children() const
bool operator!=(const CanonicalTileID &) const
CanonicalTileID(uint8_t z, uint32_t x, uint32_t y)
bool isChildOf(const CanonicalTileID &) const
OverscaledTileID scaledTo(uint8_t z) const
bool operator!=(const OverscaledTileID &) const
UnwrappedTileID toUnwrapped() const
uint32_t overscaleFactor() const
CanonicalTileID canonical
OverscaledTileID unwrapTo(int16_t wrap) const
bool operator==(const OverscaledTileID &) const
bool isChildOf(const OverscaledTileID &) const
bool operator<(const OverscaledTileID &) const
OverscaledTileID(uint8_t overscaledZ, int16_t wrap, CanonicalTileID)
CanonicalTileID canonical
UnwrappedTileID(uint8_t z, int64_t x, int64_t y)
UnwrappedTileID unwrapTo(int16_t wrap) const
float pixelsToTileUnits(float pixelValue, float zoom) const
bool operator!=(const UnwrappedTileID &) const
bool isChildOf(const UnwrappedTileID &) const
std::array< UnwrappedTileID, 4 > children() const
OverscaledTileID overscaleTo(uint8_t z) const
bool operator==(const UnwrappedTileID &) const
bool operator<(const UnwrappedTileID &) const
std::unique_ptr< Expression > string(std::unique_ptr< Expression >, std::unique_ptr< Expression > def=nullptr)
std::unique_ptr< Expression > zoom()
std::enable_if_t< std::is_integral_v< T >, T > min(T a, T b)
constexpr double tileSize_D
std::string toString(const CanonicalTileID &)
T wrap(T value, T min, T max)
::std::ostream & operator<<(::std::ostream &os, const CanonicalTileID &rhs)