Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright (c) 2001-2002, David Janssens
  3.  * Copyright (c) 2003, Yannick Verschueren
  4.  * Copyright (c) 2003, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
  5.  * All rights reserved.
  6.  *
  7.  * Redistribution and use in source and binary forms, with or without
  8.  * modification, are permitted provided that the following conditions
  9.  * are met:
  10.  * 1. Redistributions of source code must retain the above copyright
  11.  *    notice, this list of conditions and the following disclaimer.
  12.  * 2. Redistributions in binary form must reproduce the above copyright
  13.  *    notice, this list of conditions and the following disclaimer in the
  14.  *    documentation and/or other materials provided with the distribution.
  15.  *
  16.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
  17.  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  18.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  19.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  20.  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  21.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  22.  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  23.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  24.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  25.  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  26.  * POSSIBILITY OF SUCH DAMAGE.
  27.  */
  28.  
  29. /// <summary>
  30. /// Get the minimum of two integers.
  31. /// </summary>
  32. int int_min(int a, int b) {
  33.     return a<b?a:b;
  34. }
  35.  
  36. /// <summary>
  37. /// Get the maximum of two integers.
  38. /// </summary>
  39. int int_max(int a, int b) {
  40.     return a>b?a:b;
  41. }
  42.  
  43. /// <summary>
  44. /// Clamp an integer inside an interval.
  45. /// </summary>
  46. int int_clamp(int a, int min, int max) {
  47.     if (a<min) return min;
  48.     if (a>max) return max;
  49.     return a;
  50. }
  51.  
  52. /// <summary>
  53. /// Get absolute value of integer.
  54. /// </summary>
  55. int int_abs(int a) {
  56.     return a<0?-a:a;
  57. }
  58.  
  59. /// <summary>
  60. /// Divide an integer and round upwards.
  61. /// </summary>
  62. int int_ceildiv(int a, int b) {
  63.     return (a+b-1)/b;
  64. }
  65.  
  66. /// <summary>
  67. /// Divide an integer by a power of 2 and round upwards.
  68. /// </summary>
  69. int int_ceildivpow2(int a, int b) {
  70.     return (a+(1<<b)-1)>>b;
  71. }
  72.  
  73. /// <summary>
  74. /// Divide an integer by a power of 2 and round downwards.
  75. /// </summary>
  76. int int_floordivpow2(int a, int b) {
  77.     return a>>b;
  78. }
  79.  
  80. /// <summary>
  81. /// Get logarithm of an integer and round downwards.
  82. /// </summary>
  83. int int_floorlog2(int a) {
  84.     int l;
  85.     for (l=0; a>1; l++) {
  86.         a>>=1;
  87.     }
  88.     return l;
  89. }
  90.