78 #include <jasper/jas_config.h>
80 #include <jasper/jas_types.h>
95 #define JAS_KIBI JAS_CAST(size_t, 1024)
96 #define JAS_MEBI (JAS_KIBI * JAS_KIBI)
100 (((x) >= 0) ? (x) : (-(x)))
103 #define JAS_MIN(x, y) \
104 (((x) < (y)) ? (x) : (y))
107 #define JAS_MAX(x, y) \
108 (((x) > (y)) ? (x) : (y))
112 #define JAS_MOD(x, y) \
113 (((x) < 0) ? (((-x) % (y)) ? ((y) - ((-(x)) % (y))) : (0)) : ((x) % (y)))
117 #define JAS_ONES(n) \
124 JAS_ATTRIBUTE_DISABLE_USAN
125 inline static int jas_int_asr(
int x,
int n)
129 assert(((-1) >> 1) == -1);
137 JAS_ATTRIBUTE_DISABLE_USAN
138 inline static int jas_int_asl(
int x,
int n)
142 assert(((-1) << 1) == -2);
150 JAS_ATTRIBUTE_DISABLE_USAN
151 inline static int jas_fast32_asr(int_fast32_t x,
int n)
155 assert(((JAS_CAST(int_fast32_t, -1)) >> 1) == JAS_CAST(int_fast32_t, -1));
163 JAS_ATTRIBUTE_DISABLE_USAN
164 inline static int jas_fast32_asl(int_fast32_t x,
int n)
168 assert(((JAS_CAST(int_fast32_t, -1)) << 1) == JAS_CAST(int_fast32_t, -2));
181 inline static bool jas_safe_size_mul(
size_t x,
size_t y,
size_t *result)
184 if (x && y > SIZE_MAX / x) {
195 inline static bool jas_safe_size_mul3(
size_t a,
size_t b,
size_t c,
199 if (!jas_safe_size_mul(a, b, &tmp) ||
200 !jas_safe_size_mul(tmp, c, &tmp)) {
210 inline static bool jas_safe_size_add(
size_t x,
size_t y,
size_t *result)
212 if (y > SIZE_MAX - x) {
222 inline static bool jas_safe_size_sub(
size_t x,
size_t y,
size_t *result)
234 inline static bool jas_safe_intfast32_mul(int_fast32_t x, int_fast32_t y,
235 int_fast32_t *result)
241 if (x > INT_FAST32_MAX / y) {
246 if (y < INT_FAST32_MIN / x) {
254 if (x < INT_FAST32_MIN / y) {
258 if (x != 0 && y < INT_FAST32_MAX / x) {
271 inline static bool jas_safe_intfast32_mul3(int_fast32_t a, int_fast32_t b,
272 int_fast32_t c, int_fast32_t *result)
275 if (!jas_safe_intfast32_mul(a, b, &tmp) ||
276 !jas_safe_intfast32_mul(tmp, c, &tmp)) {
286 inline static bool jas_safe_intfast32_add(int_fast32_t x, int_fast32_t y,
287 int_fast32_t *result)
289 if ((y > 0 && x > INT_FAST32_MAX - y) ||
290 (y < 0 && x < INT_FAST32_MIN - y)) {