23#ifndef MUPDF_FITZ_MATH_H
24#define MUPDF_FITZ_MATH_H
32#define M_PI 3.14159265358979323846
38static inline int fz_mul255(
int a,
int b)
49static inline int fz_div255(
int c,
int a)
51 return a ? c * (255 * 256 / a) >> 8 : 0;
57#define FZ_EXPAND(A) ((A)+((A)>>7))
63#define FZ_COMBINE(A,B) (((A)*(B))>>8)
70#define FZ_COMBINE2(A,B,C,D) (((A) * (B) + (C) * (D))>>8)
76#define FZ_BLEND(SRC, DST, AMOUNT) ((((SRC)-(DST))*(AMOUNT) + ((DST)<<8))>>8)
106static inline float fz_abs(
float f)
108 return (f < 0 ? -f : f);
111static inline int fz_absi(
int i)
113 return (i < 0 ? -i : i);
116static inline float fz_min(
float a,
float b)
118 return (a < b ? a : b);
121static inline int fz_mini(
int a,
int b)
123 return (a < b ? a : b);
126static inline size_t fz_minz(
size_t a,
size_t b)
128 return (a < b ? a : b);
131static inline int64_t fz_mini64(int64_t a, int64_t b)
133 return (a < b ? a : b);
136static inline float fz_max(
float a,
float b)
138 return (a > b ? a : b);
141static inline int fz_maxi(
int a,
int b)
143 return (a > b ? a : b);
146static inline size_t fz_maxz(
size_t a,
size_t b)
148 return (a > b ? a : b);
151static inline int64_t fz_maxi64(int64_t a, int64_t b)
153 return (a > b ? a : b);
156static inline float fz_clamp(
float x,
float min,
float max)
158 return x < min ? min : x > max ? max : x;
161static inline int fz_clampi(
int x,
int min,
int max)
163 return x < min ? min : x > max ? max : x;
166static inline int64_t fz_clamp64(int64_t x, int64_t min, int64_t max)
168 return x < min ? min : x > max ? max : x;
171static inline double fz_clampd(
double x,
double min,
double max)
173 return x < min ? min : x > max ? max : x;
176static inline void *fz_clampp(
void *x,
void *min,
void *max)
178 return x < min ? min : x > max ? max : x;
181#define DIV_BY_ZERO(a, b, min, max) (((a) < 0) ^ ((b) < 0) ? (min) : (max))
191static inline fz_point fz_make_point(
float x,
float y)
227#define FZ_MIN_INF_RECT ((int)0x80000000)
228#define FZ_MAX_INF_RECT ((int)0x7fffff80)
236static inline fz_rect fz_make_rect(
float x0,
float y0,
float x1,
float y1)
238 fz_rect r = { x0, y0, x1, y1 };
253static inline fz_irect fz_make_irect(
int x0,
int y0,
int x1,
int y1)
291static inline int fz_is_empty_rect(
fz_rect r)
293 return (r.
x0 >= r.
x1 || r.
y0 >= r.
y1);
296static inline int fz_is_empty_irect(
fz_irect r)
298 return (r.
x0 >= r.
x1 || r.
y0 >= r.
y1);
304static inline int fz_is_infinite_rect(
fz_rect r)
314static inline int fz_is_infinite_irect(
fz_irect r)
323static inline int fz_is_valid_rect(
fz_rect r)
325 return (r.
x0 <= r.
x1 && r.
y0 <= r.
y1);
331static inline int fz_is_valid_irect(
fz_irect r)
333 return (r.
x0 <= r.
x1 && r.
y0 <= r.
y1);
339static inline unsigned int
348 w = (
unsigned int)r.
x1 - r.
x0;
367 h = (
unsigned int)(r.
y1 - r.
y0);
397static inline fz_matrix fz_make_matrix(
float a,
float b,
float c,
float d,
float e,
float f)
403static inline int fz_is_identity(
fz_matrix m)
405 return m.
a == 1 && m.
b == 0 && m.
c == 0 && m.
d == 1 && m.
e == 0 && m.
f == 0;
789static inline fz_quad fz_make_quad(
790 float ul_x,
float ul_y,
791 float ur_x,
float ur_y,
792 float ll_x,
float ll_y,
793 float lr_x,
float lr_y)
895#ifdef HAVE_STDCKDINT_H
897#include <stdckdint.h>
900#define fz_ckd_mul_i32(O,A,B) ckd_mul(O,(int32_t)(A),(int32_t)(B))
901#define fz_ckd_mul_u32(O,A,B) ckd_mul(O,(uint32_t)(A),(uint32_t)(B))
902#define fz_ckd_mul_int(O,A,B) ckd_mul(O,(int)(A),(int)(B))
903#define fz_ckd_mul_uint(O,A,B) ckd_mul(O,(unsigned int)(A),(unsigned int)(B))
904#define fz_ckd_mul_size(O,A,B) ckd_mul(O,(size_t)(A),(size_t)(B))
905#define fz_ckd_mul_i64(O,A,B) ckd_mul(O,(int64_t)(A),(int64_t)(B))
906#define fz_ckd_mul_u64(O,A,B) ckd_mul(O,(uint64_t)(A),(uint64_t)(B))
908#define fz_ckd_add_i32(O,A,B) ckd_add(O,(int32_t)(A),(int32_t)(B))
909#define fz_ckd_add_u32(O,A,B) ckd_add(O,(uint32_t)(A),(uint32_t)(B))
910#define fz_ckd_add_int(O,A,B) ckd_add(O,(int)(A),(int)(B))
911#define fz_ckd_add_uint(O,A,B) ckd_add(O,(unsigned int)(A),(unsigned int)(B))
912#define fz_ckd_add_size(O,A,B) ckd_add(O,(size_t)(A),(size_t)(B))
913#define fz_ckd_add_i64(O,A,B) ckd_add(O,(int64_t)(A),(int64_t)(B))
914#define fz_ckd_add_u64(O,A,B) ckd_add(O,(uint64_t)(A),(uint64_t)(B))
916#define fz_ckd_sub_i32(O,A,B) ckd_sub(O,(int32_t)(A),(int32_t)(B))
917#define fz_ckd_sub_u32(O,A,B) ckd_sub(O,(uint32_t)(A),(uint32_t)(B))
918#define fz_ckd_sub_int(O,A,B) ckd_sub(O,(int)(A),(int)(B))
919#define fz_ckd_sub_uint(O,A,B) ckd_sub(O,(unsigned int)(A),(unsigned int)(B))
920#define fz_ckd_sub_size(O,A,B) ckd_sub(O,(size_t)(A),(size_t)(B))
921#define fz_ckd_sub_i64(O,A,B) ckd_sub(O,(int64_t)(A),(int64_t)(B))
922#define fz_ckd_sub_u64(O,A,B) ckd_sub(O,(uint64_t)(A),(uint64_t)(B))
956#define fz_bytes_from_bits(A) (((A)>>3) + !!((A) & 7))
#define FZ_DATA
Definition export.h:49
fz_rect fz_intersect_rect(fz_rect a, fz_rect b)
int fz_is_infinite_quad(fz_quad q)
FZ_DATA const fz_quad fz_infinite_quad
float fz_matrix_max_expansion(fz_matrix m)
int fz_ckd_sub_i32(int32_t *out, int32_t a, int32_t b)
int fz_contains_rect(fz_rect a, fz_rect b)
fz_rect fz_include_point_in_rect(fz_rect r, fz_point p)
int fz_ckd_add_i64(int64_t *out, int64_t a, int64_t b)
fz_matrix fz_pre_scale(fz_matrix m, float sx, float sy)
fz_rect fz_expand_rect(fz_rect b, float expand)
int64_t fz_atoi64(const char *s)
int fz_is_point_inside_rect(fz_point p, fz_rect r)
int fz_ckd_sub_uint(unsigned int *out, unsigned int a, unsigned int b)
int fz_ckd_int_from_i64(int *out, int64_t in)
#define FZ_MAX_INF_RECT
Definition geometry.h:228
int fz_ckd_mul_size(size_t *out, size_t a, size_t b)
int fz_ckd_add_u64(uint64_t *out, uint64_t a, uint64_t b)
int fz_ckd_sub_u64(uint64_t *out, uint64_t a, uint64_t b)
int fz_is_irect_inside_irect(fz_irect inner, fz_irect outer)
int fz_ckd_sub_size(size_t *out, size_t a, size_t b)
int fz_is_empty_quad(fz_quad q)
fz_matrix fz_shear(float sx, float sy)
fz_point fz_transform_vector(fz_point vector, fz_matrix m)
fz_irect fz_translate_irect(fz_irect a, int xoff, int yoff)
int fz_atoi(const char *s)
fz_matrix fz_post_scale(fz_matrix m, float sx, float sy)
int fz_is_point_inside_quad(fz_point p, fz_quad q)
int fz_ckd_add_int(int *out, int a, int b)
float fz_matrix_expansion(fz_matrix m)
int fz_is_point_inside_irect(int x, int y, fz_irect r)
fz_irect fz_intersect_irect(fz_irect a, fz_irect b)
fz_rect fz_union_rect(fz_rect a, fz_rect b)
int fz_overlaps_rect(fz_rect a, fz_rect b)
fz_matrix fz_pre_rotate(fz_matrix m, float degrees)
FZ_DATA const fz_rect fz_empty_rect
fz_matrix fz_gridfit_matrix(int as_tiled, fz_matrix m)
fz_rect fz_translate_rect(fz_rect a, float xoff, float yoff)
fz_rect fz_rect_from_irect(fz_irect bbox)
#define FZ_MIN_INF_RECT
Definition geometry.h:227
fz_point fz_normalize_vector(fz_point p)
size_t fz_atoz(const char *s)
int fz_ckd_add_i32(int32_t *out, int32_t a, int32_t b)
fz_irect fz_round_rect(fz_rect rect)
FZ_DATA const fz_matrix fz_identity
int fz_ckd_mul_i64(int64_t *out, int64_t a, int64_t b)
fz_irect fz_expand_irect(fz_irect a, int expand)
int fz_ckd_size_from_i64(size_t *out, int64_t in)
int fz_ckd_mul_u64(uint64_t *out, uint64_t a, uint64_t b)
fz_matrix fz_pre_shear(fz_matrix m, float sx, float sy)
int fz_ckd_add_u32(uint32_t *out, uint32_t a, uint32_t b)
int fz_ckd_mul_uint(unsigned int *out, unsigned int a, unsigned int b)
FZ_DATA const fz_rect fz_unit_rect
fz_rect fz_rect_from_quad(fz_quad q)
int fz_is_quad_inside_quad(fz_quad needle, fz_quad haystack)
float fz_rect_area(fz_rect r)
fz_matrix fz_invert_matrix(fz_matrix matrix)
int fz_is_rect_inside_rect(fz_rect inner, fz_rect outer)
fz_matrix fz_pre_translate(fz_matrix m, float tx, float ty)
FZ_DATA const fz_irect fz_infinite_irect
fz_point fz_transform_point_xy(float x, float y, fz_matrix m)
FZ_DATA const fz_irect fz_empty_irect
int fz_ckd_mul_int(int *out, int a, int b)
int fz_is_valid_quad(fz_quad q)
fz_point fz_transform_point(fz_point point, fz_matrix m)
int fz_ckd_add_size(size_t *out, size_t a, size_t b)
int fz_ckd_mul_i32(int32_t *out, int32_t a, int32_t b)
fz_matrix fz_scale(float sx, float sy)
fz_quad fz_transform_quad(fz_quad q, fz_matrix m)
fz_matrix fz_transform_page(fz_rect mediabox, float resolution, float rotate)
int fz_ckd_mul_u32(uint32_t *out, uint32_t a, uint32_t b)
int fz_is_rectilinear(fz_matrix m)
FZ_DATA const fz_quad fz_invalid_quad
fz_matrix fz_rotate(float degrees)
int fz_ckd_sub_int(int *out, int a, int b)
fz_matrix fz_concat(fz_matrix left, fz_matrix right)
int fz_ckd_sub_i64(int64_t *out, int64_t a, int64_t b)
int fz_ckd_add_uint(unsigned int *out, unsigned int a, unsigned int b)
float fz_atof(const char *s)
fz_matrix fz_translate(float tx, float ty)
FZ_DATA const fz_rect fz_infinite_rect
FZ_DATA const fz_irect fz_invalid_irect
int fz_ckd_sub_u32(uint32_t *out, uint32_t a, uint32_t b)
fz_quad fz_quad_from_rect(fz_rect r)
int fz_is_quad_intersecting_quad(fz_quad a, fz_quad b)
int fz_try_invert_matrix(fz_matrix *inv, fz_matrix src)
fz_rect fz_transform_rect(fz_rect rect, fz_matrix m)
fz_irect fz_irect_from_rect(fz_rect rect)
FZ_DATA const fz_rect fz_invalid_rect
Definition geometry.h:248
int y1
Definition geometry.h:250
int y0
Definition geometry.h:249
int x1
Definition geometry.h:250
int x0
Definition geometry.h:249
Definition geometry.h:388
float e
Definition geometry.h:389
float f
Definition geometry.h:389
float d
Definition geometry.h:389
float a
Definition geometry.h:389
float c
Definition geometry.h:389
float b
Definition geometry.h:389
Definition geometry.h:187
float x
Definition geometry.h:188
float y
Definition geometry.h:188
Definition geometry.h:782
fz_point ul
Definition geometry.h:783
fz_point ll
Definition geometry.h:783
fz_point lr
Definition geometry.h:783
fz_point ur
Definition geometry.h:783
Definition geometry.h:231
float y0
Definition geometry.h:232
float x0
Definition geometry.h:232
float y1
Definition geometry.h:233
float x1
Definition geometry.h:233