15static inline int fcmp(
double a,
double b) {
26static inline int imax(
int a,
int b) {
return a > b ? a : b; }
29static inline size_t zmax(
size_t a,
size_t b) {
return a > b ? a : b; }
32static inline int imin(
int a,
int b) {
return a < b ? a : b; }
49 return memcmp(&a, &b,
sizeof(a)) == 0;
77 assert(original >= 0);
87 return (
int)(original *
scale);
109static inline void argb2rgba(
size_t width,
size_t height,
unsigned char *data) {
110 assert(data !=
NULL || (width == 0 && height == 0));
113 enum { Ba = 0, Ga = 1, Ra = 2, Aa = 3 };
114 enum { Rb = 0, Gb = 1, Bb = 2, Ab = 3 };
116 for (
size_t y = 0; y < height; ++y) {
117 for (
size_t x = 0; x < width; ++x) {
118 const unsigned char red = data[Ra];
119 const unsigned char blue = data[Ba];
138 (void)((a) == (b)); \
143 char tmp_[sizeof(*(a))]; \
144 memcpy(tmp_, (a), sizeof(*(a))); \
146 memcpy((b), tmp_, sizeof(*(b))); \
158static inline float d2f(
double v) {
static pointf scale(double c, pointf p)
static int scale_clamp(int original, double scale)
scale up or down a non-negative integer, clamping to [0, INT_MAX]
static bool is_exactly_zero(double v)
is a value precisely 0.0?
static bool is_exactly_equal(double a, double b)
are two values precisely the same?
static int imin(int a, int b)
minimum of two integers
static int fcmp(double a, double b)
comparator for doubles
static size_t zmax(size_t a, size_t b)
maximum of two sizes
static void argb2rgba(size_t width, size_t height, unsigned char *data)
static int imax(int a, int b)
maximum of two integers
static float d2f(double v)