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)))
124JAS_ATTRIBUTE_DISABLE_USAN
125inline static int jas_int_asr(
int x,
int n)
129 assert(((-1) >> 1) == -1);
137JAS_ATTRIBUTE_DISABLE_USAN
138inline static int jas_int_asl(
int x,
int n)
142 assert(((-1) << 1) == -2);
150JAS_ATTRIBUTE_DISABLE_USAN
151inline 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));
163JAS_ATTRIBUTE_DISABLE_USAN
164inline 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));
181inline static bool jas_safe_size_mul(
size_t x,
size_t y,
size_t *result)
184 if (x && y > SIZE_MAX / x) {
195inline 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)) {
210inline static bool jas_safe_size_add(
size_t x,
size_t y,
size_t *result)
212 if (y > SIZE_MAX - x) {
222inline static bool jas_safe_size_sub(
size_t x,
size_t y,
size_t *result)
234inline 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) {
271inline 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)) {
286inline 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)) {