72 static_assert(
sizeof(T) <= 4);
73 if(val < (std::numeric_limits<T>::min)())
74 val = (std::numeric_limits<T>::min)();
75 else if(val > (std::numeric_limits<T>::max)())
76 val = (std::numeric_limits<T>::max)();
89 return clip<T>((int64_t)lhs + rhs);
95 return clip<T>((int64_t)lhs - rhs);
109 uint32_t
x0(
void)
const
113 uint32_t
y0(
void)
const
117 uint32_t
x1(
void)
const
121 uint32_t
y1(
void)
const
144 return (uint32_t)
w_ *
h_;
148 uint32_t x = std::max<uint32_t>(
x0(), rhs->
x0());
149 uint32_t y = std::max<uint32_t>(
y0(), rhs->
y0());
150 uint16_t w = uint16_t(std::min<uint32_t>(
x1(), rhs->
x1()) - x);
151 uint16_t h = uint16_t(std::min<uint32_t>(
y1(), rhs->
y1()) - y);
244 grklog.info(
"[%u,%u,%u,%u,%u,%u]",
origin_x0,
origin_y0,
x0,
y0,
x1,
y1);
260 return x >=
x0 && y >=
y0 && x <
x1 && y <
y1;
280 throw std::invalid_argument(
"Null pointer passed to Rect::operator=");
287 return !(*
this == other);
356 return Rect<T>(std::max<T>(
x0, rhs->
x0), std::max<T>(
y0, rhs->
y0), std::min<T>(
x1, rhs->
x1),
357 std::min<T>(
y1, rhs->
y1));
366 std::min<T>(
x1, rhs->
x1()), std::min<T>(
y1, rhs->
y1()));
376 std::min<T>(
y1, rhs.
y1));
383 return Rect<T>(std::max<T>(
x0, rhs->
x0), std::max<T>(
y0, rhs->
y0), std::min<T>(
x1, rhs->
x1),
384 std::min<T>(
y1, rhs->
y1));
389 return std::max<T>(
x0, rhs->
x0) < std::min<T>(
x1, rhs->
x1) &&
390 std::max<T>(
y0, rhs->
y0) < std::min<T>(
y1, rhs->
y1);
394 return std::max<T>(
x0, rhs->
x0()) < std::min<T>(
x1, rhs->
x1()) &&
395 std::max<T>(
y0, rhs->
y0()) < std::min<T>(
y1, rhs->
y1());
400 return Rect<T>(std::min<T>(
x0, rhs->
x0), std::min<T>(
y0, rhs->
y0), std::max<T>(
x1, rhs->
x1),
401 std::max<T>(
y1, rhs->
y1));
409 return (uint64_t)(
x1 -
x0) * (
y1 -
y0);
446 return grow_IN_PLACE(boundary, boundary, (std::numeric_limits<T>::max)(),
447 (std::numeric_limits<T>::max)());
451 return grow_IN_PLACE(boundaryx, boundaryy, (std::numeric_limits<T>::max)(),
452 (std::numeric_limits<T>::max)());
477using Rect32 = Rect<uint32_t>;
478using Rect16 = Rect<uint16_t>;
ResWindow.
Definition CompressedChunkCache.h:36
T satAdd(int64_t lhs, int64_t rhs)
Definition geometry.h:81
T clip(int64_t val)
Definition geometry.h:70
uint32_t ceildiv(T a, T b)
Divide an integer by another integer and round upwards.
Definition intmath.h:32
ILogger & grklog
Definition Logger.cpp:24
T satSub(T lhs, T rhs)
Definition geometry.h:93
Line< uint32_t > Line32
Definition geometry.h:60
Rect< uint32_t > Rect32
Definition geometry.h:64
Rect< float > RectF
Definition geometry.h:66
T ceildivpow2(T a, uint8_t b)
Definition intmath.h:39
Point< uint16_t > Point16
Definition geometry.h:43
Rect< uint16_t > Rect16
Definition geometry.h:65
Point< uint8_t > Point8
Definition geometry.h:44
Point< uint32_t > Point32
Definition geometry.h:42
Rect< double > RectD
Definition geometry.h:67
Line(T _x0, T _x1)
Definition geometry.h:50
uint32_t x0
Definition geometry.h:51
uint32_t x1
Definition geometry.h:52
T length() const
Definition geometry.h:54
Line()
Definition geometry.h:49
Point()
Definition geometry.h:37
uint32_t y
Definition geometry.h:40
uint32_t x
Definition geometry.h:39
Point(T _x, T _y)
Definition geometry.h:38
Definition geometry.h:105
uint16_t w_
Definition geometry.h:169
uint32_t x0_
Definition geometry.h:168
void setRect(const Rect32_16 *rhs)
Definition geometry.h:154
uint32_t x0(void) const
Definition geometry.h:109
uint32_t y0(void) const
Definition geometry.h:113
uint32_t x1(void) const
Definition geometry.h:117
uint32_t area(void) const
Definition geometry.h:142
Rect32_16(uint32_t x0, uint32_t y0, uint16_t w, uint16_t h)
Definition geometry.h:106
Rect32_16(void)
Definition geometry.h:107
virtual void print(void) const
Definition geometry.h:162
uint16_t height() const
Definition geometry.h:129
bool empty(void) const
Definition geometry.h:137
virtual ~Rect32_16()=default
bool valid() const
Definition geometry.h:133
uint32_t y0_
Definition geometry.h:168
Rect32_16 intersection(const Rect32_16 *rhs) const
Definition geometry.h:146
uint32_t y1(void) const
Definition geometry.h:121
uint16_t width() const
Definition geometry.h:125
uint16_t h_
Definition geometry.h:169
void setRect(const Rect32_16 rhs)
Definition geometry.h:158
Definition geometry.h:174
T width() const
Definition geometry.h:411
Rect(const Rect &rhs)
Definition geometry.h:180
Line< T > dimY() const
Definition geometry.h:423
Rect< T > & pan_IN_PLACE(int64_t x, int64_t y)
Definition geometry.h:434
Rect< T > clip(const Rect32_16 *rhs) const
Definition geometry.h:363
Rect< T > & setOrigin(const Rect< T > *rhs, bool absolute)
Definition geometry.h:210
bool valid(void) const
Definition geometry.h:246
uint32_t x1
Definition geometry.h:192
T height() const
Definition geometry.h:415
uint32_t origin_x0
Definition geometry.h:191
Rect< T > scaleDownCeil(uint64_t denx, uint64_t deny) const
Definition geometry.h:329
Rect< T > & clip_IN_PLACE(const Rect &rhs)
Definition geometry.h:372
Rect< T > rectUnion(const Rect *rhs) const
Definition geometry.h:397
Rect< T > scaleDownPow2(uint8_t powx, uint8_t powy) const
Definition geometry.h:320
Rect< T > intersection(const Rect< T > &rhs) const
Definition geometry.h:347
bool contains(T x, T y)
Definition geometry.h:258
Rect< T > clip(const Rect *rhs) const
Definition geometry.h:353
Rect< T > & grow_IN_PLACE(T boundary, T maxX, T maxY)
Definition geometry.h:454
Rect< T > scale(uint32_t scalex, uint32_t scaley) const
Definition geometry.h:310
bool nonEmptyIntersection(const Rect *rhs) const
Definition geometry.h:386
void setRect(const Rect *rhs)
Definition geometry.h:297
Rect(T x0, T y0, T x1, T y1)
Definition geometry.h:179
Rect< T > scaleDownPow2(Point8 pow) const
Definition geometry.h:325
Rect< T > & setOrigin(const Rect< T > &rhs, bool absolute)
Definition geometry.h:206
uint64_t area(void) const
Definition geometry.h:407
Rect< T > & toRelative(void)
Definition geometry.h:224
Rect< T > rectUnion(const Rect &rhs) const
Definition geometry.h:403
Line< T > dimX() const
Definition geometry.h:419
Rect< T > pan(int64_t x, int64_t y) const
Definition geometry.h:428
Rect< T > & grow_IN_PLACE(T boundaryx, T boundaryy, Rect bounds)
Definition geometry.h:466
Rect(void)
Definition geometry.h:187
uint32_t origin_y0
Definition geometry.h:191
Rect(const Rect *rhs)
Definition geometry.h:181
Rect< T > & grow_IN_PLACE(T boundaryx, T boundaryy, T maxX, T maxY)
Definition geometry.h:458
Rect< T > scaleDownCeilPow2(uint8_t powx, uint8_t powy) const
Definition geometry.h:341
uint32_t x0
Definition geometry.h:192
Rect< T > & operator=(const Rect &rhs)
Definition geometry.h:262
bool operator==(const Rect &rhs) const
Definition geometry.h:289
bool contains(Point< T > pt)
Definition geometry.h:254
virtual void print(void) const
Definition geometry.h:242
bool operator!=(const Rect &other) const
Definition geometry.h:285
bool empty(void) const
Definition geometry.h:250
Rect< T > clip(const Rect &rhs) const
Definition geometry.h:368
Rect< T > & operator=(const Rect *rhs)
Definition geometry.h:276
bool nonEmptyIntersection(const Rect32_16 *rhs) const
Definition geometry.h:392
Rect< T > & setOrigin(T origx, T origy, bool absolute)
Definition geometry.h:194
bool absoluteCoordinates
Definition geometry.h:190
Rect< T > & grow_IN_PLACE(T boundaryx, T boundaryy)
Definition geometry.h:449
Rect< T > intersection(const Rect *rhs) const
Definition geometry.h:380
Rect< T > & grow_IN_PLACE(T boundary, const Rect< T > &bounds)
Definition geometry.h:462
Rect< T > scaleDown(uint64_t denx, uint64_t deny) const
Definition geometry.h:315
Rect< T > scaleDownCeil(uint32_t den) const
Definition geometry.h:305
uint32_t y0
Definition geometry.h:192
Rect< T > & grow_IN_PLACE(T boundary)
Definition geometry.h:444
Rect(T origin_x0, T origin_y0, T x0, T y0, T x1, T y1)
Definition geometry.h:175
Rect< T > clip(const Rect32_16 &rhs) const
Definition geometry.h:359
uint32_t y1
Definition geometry.h:192
Rect< T > scaleDownCeilPow2(uint8_t power) const
Definition geometry.h:335
void setRect(const Rect &rhs)
Definition geometry.h:301
Rect< T > & toAbsolute(void)
Definition geometry.h:234