1#[inline]
2pub(crate) fn opj_int_max(mut a: i32, mut b: i32) -> i32 {
3 a.max(b)
4}
5
6#[inline]
7pub(crate) fn opj_int_min(mut a: i32, mut b: i32) -> i32 {
8 a.min(b)
9}
10
11#[inline]
12pub(crate) fn opj_uint_min(mut a: u32, mut b: u32) -> u32 {
13 a.min(b)
14}
15
16#[inline]
17pub(crate) fn opj_uint_max(mut a: u32, mut b: u32) -> u32 {
18 a.max(b)
19}
20
21#[inline]
22pub(crate) fn opj_int_floordivpow2(mut a: i32, mut b: i32) -> i32 {
23 a >> b
24}
25
26#[inline]
27pub(crate) fn opj_int_floorlog2(mut a: i32) -> i32 {
28 let mut l: i32 = 0;
29 l = 0;
30 while a > 1 {
31 a >>= 1;
32 l += 1
33 }
34 l
35}
36
37#[inline]
38pub(crate) fn opj_uint_floordivpow2(mut a: u32, mut b: u32) -> u32 {
39 a >> b
40}
41
42#[inline]
43pub(crate) fn opj_uint_floorlog2(mut a: u32) -> u32 {
44 let mut l: u32 = 0;
45 l = 0_u32;
46 while a > 1 {
47 a >>= 1;
48 l += 1;
49 }
50 l
51}
52
53#[inline]
54pub(crate) fn opj_uint_ceildivpow2(mut a: u32, mut b: u32) -> u32 {
55 ((a as u64).wrapping_add(1_u64 << b).wrapping_sub(1_u64) >> b) as u32
56}
57
58#[inline]
59pub(crate) fn opj_uint_ceildiv(mut a: u32, mut b: u32) -> u32 {
60 assert!(b != 0);
61 (a as u64)
62 .wrapping_add(b as u64)
63 .wrapping_sub(1_u64)
64 .wrapping_div(b as u64) as u32
65}
66
67#[inline]
68pub(crate) fn opj_int64_ceildivpow2(mut a: i64, mut b: i32) -> i32 {
69 ((a + (1_i64 << b) - 1_i64) >> b) as i32
70}
71
72#[inline]
73pub(crate) fn opj_int_ceildiv(mut a: i32, mut b: i32) -> i32 {
74 assert!(b != 0);
75 ((a as i64 + b as i64 - 1_i64) / b as i64) as i32
76}
77
78#[inline]
79pub(crate) fn opj_uint64_ceildiv_res_uint32(mut a: u64, mut b: u64) -> u32 {
80 assert!(b != 0);
81 ((a + b - 1) / b) as u32
82}
83
84#[inline]
85pub(crate) fn opj_int_ceildivpow2(mut a: i32, mut b: i32) -> i32 {
86 ((a as i64 + (1_i64 << b) - 1_i64) >> b) as i32
87}
88
89#[inline]
90pub(crate) fn opj_uint_adds(mut a: u32, mut b: u32) -> u32 {
91 a.saturating_add(b)
92}
93
94#[inline]
95pub(crate) fn opj_int_abs(mut a: i32) -> i32 {
96 a.abs()
97}
98
99#[inline]
100pub(crate) fn opj_uint_subs(mut a: u32, mut b: u32) -> u32 {
101 a.saturating_sub(b)
102}
103
104#[inline]
105pub(crate) fn opj_lrintf(mut f: f32) -> i64 {
106 f.round_ties_even() as i64
107}
108
109#[inline]
110pub(crate) fn opj_int64_clamp(mut a: i64, mut min: i64, mut max: i64) -> i64 {
111 a.clamp(min, max)
112}
113
114#[inline]
115pub(crate) fn opj_int_clamp(mut a: i32, mut min: i32, mut max: i32) -> i32 {
116 a.clamp(min, max)
117}
118
119#[inline]
120pub(crate) fn opj_int_sub_no_overflow(mut a: i32, mut b: i32) -> i32 {
121 a.wrapping_sub(b)
122}
123
124#[inline]
125pub(crate) fn opj_int_add_no_overflow(mut a: i32, mut b: i32) -> i32 {
126 a.wrapping_add(b)
127}