1/* 2 * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium 3 * Copyright (c) 2002-2007, Professor Benoit Macq 4 * Copyright (c) 2001-2003, David Janssens 5 * Copyright (c) 2002-2003, Yannick Verschueren 6 * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe 7 * Copyright (c) 2005, Herve Drolon, FreeImage Team 8 * All rights reserved. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' 20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 * POSSIBILITY OF SUCH DAMAGE. 30 */ 31#ifndef __INT_H 32#define __INT_H 33/** 34@file int.h 35@brief Implementation of operations on integers (INT) 36 37The functions in INT.H have for goal to realize operations on integers. 38*/ 39 40/** @defgroup INT INT - Implementation of operations on integers */ 41/*@{*/ 42 43/** @name Exported functions (see also openjpeg.h) */ 44/*@{*/ 45/* ----------------------------------------------------------------------- */ 46/** 47Get the minimum of two integers 48@return Returns a if a < b else b 49*/ 50static INLINE int int_min(int a, int b) { 51 return a < b ? a : b; 52} 53/** 54Get the maximum of two integers 55@return Returns a if a > b else b 56*/ 57static INLINE int int_max(int a, int b) { 58 return (a > b) ? a : b; 59} 60/** 61Clamp an integer inside an interval 62@return 63<ul> 64<li>Returns a if (min < a < max) 65<li>Returns max if (a > max) 66<li>Returns min if (a < min) 67</ul> 68*/ 69static INLINE int int_clamp(int a, int min, int max) { 70 if (a < min) 71 return min; 72 if (a > max) 73 return max; 74 return a; 75} 76/** 77@return Get absolute value of integer 78*/ 79static INLINE int int_abs(int a) { 80 return a < 0 ? -a : a; 81} 82/** 83Divide an integer and round upwards 84@return Returns a divided by b 85*/ 86static INLINE int int_ceildiv(int a, int b) { 87 return (a + b - 1) / b; 88} 89/** 90Divide an integer by a power of 2 and round upwards 91@return Returns a divided by 2^b 92*/ 93static INLINE int int_ceildivpow2(int a, int b) { 94 return (a + (1 << b) - 1) >> b; 95} 96/** 97Divide an integer by a power of 2 and round downwards 98@return Returns a divided by 2^b 99*/ 100static INLINE int int_floordivpow2(int a, int b) { 101 return a >> b; 102} 103/** 104Get logarithm of an integer and round downwards 105@return Returns log2(a) 106*/ 107static INLINE int int_floorlog2(int a) { 108 int l; 109 for (l = 0; a > 1; l++) { 110 a >>= 1; 111 } 112 return l; 113} 114/* ----------------------------------------------------------------------- */ 115/*@}*/ 116 117/*@}*/ 118 119#endif 120