61 static_assert(
sizeof(T) <= 4);
62 if(val < (std::numeric_limits<T>::min)())
63 val = (std::numeric_limits<T>::min)();
64 else if(val > (std::numeric_limits<T>::max)())
65 val = (std::numeric_limits<T>::max)();
72 return clip<T>(lhs + rhs);
78 return clip<T>((int64_t)lhs + rhs);
84 return clip<T>((int64_t)lhs - rhs);
90 return clip<T>(lhs - rhs);
109 std::cout <<
"[" <<
x0 <<
"," <<
y0 <<
"," <<
x1 <<
"," <<
y1 <<
"]" << std::endl;
113 std::ostringstream os;
114 os <<
"[" <<
x0 <<
"," <<
y0 <<
"," <<
x1 <<
"," <<
y1 <<
"]";
127 return pt.
x >=
x0 && pt.
y >=
y0 && pt.
x <
x1 && pt.
y <
y1;
136 if(rhs && (
this != rhs))
184 std::min<T>(
x1, rhs->
x1), std::min<T>(
y1, rhs->
y1));
189 std::min<T>(
x1, rhs->
x1), std::min<T>(
y1, rhs->
y1));
193 return std::max<T>(
x0, rhs->
x0) < std::min<T>(
x1, rhs->
x1) &&
194 std::max<T>(
y0, rhs->
y0) < std::min<T>(
y1, rhs->
y1);
199 std::max<T>(
x1, rhs->
x1), std::max<T>(
y1, rhs->
y1));
207 return (uint64_t)(
x1 -
x0) * (
y1 -
y0);
233 x0 = satAdd<T>((int64_t)
x0, (int64_t)x);
234 y0 = satAdd<T>((int64_t)
y0, (int64_t)y);
235 x1 = satAdd<T>((int64_t)
x1, (int64_t)x);
236 y1 = satAdd<T>((int64_t)
y1, (int64_t)y);
240 return grow(boundary, boundary, (std::numeric_limits<T>::max)(),
241 (std::numeric_limits<T>::max)());
245 return grow(boundaryx, boundaryy, (std::numeric_limits<T>::max)(),
246 (std::numeric_limits<T>::max)());
250 return grow(boundary, boundary, maxX, maxY);
254 return grow(boundaryx, boundaryy,
grkRect<T>((T)0, (T)0, maxX, maxY));
258 return grow(boundary, boundary, bounds);
262 x0 = std::max<T>(satSub<T>(
x0, boundaryx), bounds.
x0);
263 y0 = std::max<T>(satSub<T>(
y0, boundaryy), bounds.
y0);
264 x1 = std::min<T>(satAdd<T>(
x1, boundaryx), bounds.
x1);
265 y1 = std::min<T>(satAdd<T>(
y1, boundaryy), bounds.
y1);
Copyright (C) 2016-2021 Grok Image Compression Inc.
Definition: ICacheable.h:20
T satAdd(int64_t lhs, int64_t rhs)
Definition: util.h:70
T clip(int64_t val)
Definition: util.h:59
grkRect< uint32_t > grkRectU32
Definition: util.h:56
uint32_t ceildiv(T a, T b)
Divide an integer by another integer and round upwards.
Definition: grk_intmath.h:33
T satSub(T lhs, T rhs)
Definition: util.h:82
T ceildivpow2(T a, uint32_t b)
Definition: grk_intmath.h:40
T x1
Definition: util.h:45
grkLine(T _x0, T _x1)
Definition: util.h:43
grkLine()
Definition: util.h:42
T length()
Definition: util.h:46
T x0
Definition: util.h:44
grkPoint(T _x, T _y)
Definition: util.h:33
grkPoint()
Definition: util.h:32
T x1
Definition: util.h:96
grkRect(void)
Definition: util.h:106
T y0
Definition: util.h:96
T parityY(void)
Definition: util.h:273
grkRect< T > pan(int64_t x, int64_t y) const
Definition: util.h:225
grkRect< T > & grow(T boundaryx, T boundaryy, grkRect< T > bounds)
Definition: util.h:260
bool is_valid(void) const
Definition: util.h:117
grkRect< T > rectceildiv(uint32_t den) const
Definition: util.h:164
void set(grkRect< T > *rhs)
Definition: util.h:151
grkRect< T > rectceildiv(uint32_t denx, uint32_t deny) const
Definition: util.h:168
bool non_empty_intersection(const grkRect< T > *rhs) const
Definition: util.h:191
uint64_t area(void) const
Definition: util.h:205
void print(void) const
Definition: util.h:107
grkRect< T > & operator=(const grkRect< T > &rhs)
Definition: util.h:129
grkLine< T > dimX()
Definition: util.h:217
void set(grkRect< T > rhs)
Definition: util.h:155
grkRect< T > & operator=(const grkRect< T > *rhs)
Definition: util.h:133
bool operator==(const grkRect< T > &rhs) const
Definition: util.h:145
T width() const
Definition: util.h:209
bool contains(grkPoint< T > pt)
Definition: util.h:125
grkRect< T > & grow(T boundary)
Definition: util.h:238
T parityX(void)
Definition: util.h:269
grkRect< T > intersection(const grkRect< T > rhs) const
Definition: util.h:173
grkRect< T > intersection(const grkRect< T > *rhs) const
Definition: util.h:186
grkRect< T > rectceildivpow2(uint32_t power) const
Definition: util.h:159
grkRect< T > & grow(T boundaryx, T boundaryy, T maxX, T maxY)
Definition: util.h:252
bool non_empty(void) const
Definition: util.h:121
grkRect< T > & grow(T boundaryx, T boundaryy)
Definition: util.h:243
bool isContainedIn(const grkRect< T > rhs) const
Definition: util.h:177
void panInplace(int64_t x, int64_t y)
Definition: util.h:231
void clip(const grkRect< T > *rhs)
Definition: util.h:181
grkRect< T > rectUnion(const grkRect< T > *rhs) const
Definition: util.h:196
grkRect(T x0, T y0, T x1, T y1)
Definition: util.h:98
grkRect< T > & grow(T boundary, grkRect< T > bounds)
Definition: util.h:256
grkRect< T > rectUnion(const grkRect< T > &rhs) const
Definition: util.h:201
grkRect< T > & grow(T boundary, T maxX, T maxY)
Definition: util.h:248
std::string boundsString()
Definition: util.h:111
T height() const
Definition: util.h:213
T y1
Definition: util.h:96
grkRect(const grkRect &rhs)
Definition: util.h:99
grkLine< T > dimY()
Definition: util.h:221
T x0
Definition: util.h:96