ut0ut.ic
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /******************************************************************
  2. Various utilities
  3. (c) 1994, 1995 Innobase Oy
  4. Created 5/30/1994 Heikki Tuuri
  5. *******************************************************************/
  6. /**********************************************************
  7. Calculates the minimum of two ulints. */
  8. UNIV_INLINE
  9. ulint
  10. ut_min(
  11. /*===*/
  12. /* out: minimum */
  13. ulint    n1, /* in: first number */
  14. ulint    n2) /* in: second number */
  15. {
  16. return((n1 <= n2) ? n1 : n2);
  17. }
  18. /**********************************************************
  19. Calculates the maximum of two ulints. */
  20. UNIV_INLINE
  21. ulint
  22. ut_max(
  23. /*===*/
  24. /* out: maximum */
  25. ulint    n1, /* in: first number */
  26. ulint    n2) /* in: second number */
  27. {
  28. return((n1 <= n2) ? n2 : n1);
  29. }
  30. /********************************************************************
  31. Calculates minimum of two ulint-pairs. */
  32. UNIV_INLINE
  33. void
  34. ut_pair_min(
  35. /*========*/
  36. ulint* a, /* out: more significant part of minimum */
  37. ulint* b, /* out: less significant part of minimum */
  38. ulint a1, /* in: more significant part of first pair */
  39. ulint b1, /* in: less significant part of first pair */
  40. ulint a2, /* in: more significant part of second pair */
  41. ulint b2) /* in: less significant part of second pair */
  42. {
  43. if (a1 == a2) {
  44. *a = a1;
  45. *b = ut_min(b1, b2);
  46. } else if (a1 < a2) {
  47. *a = a1;
  48. *b = b1;
  49. } else {
  50. *a = a2;
  51. *b = b2;
  52. }
  53. }
  54. /**********************************************************
  55. Compares two ulints. */
  56. UNIV_INLINE
  57. int
  58. ut_ulint_cmp(
  59. /*=========*/
  60. /* out: 1 if a > b, 0 if a == b, -1 if a < b */
  61. ulint a, /* in: ulint */
  62. ulint b) /* in: ulint */
  63. {
  64. if (a < b) {
  65. return(-1);
  66. } else if (a == b) {
  67. return(0);
  68. } else {
  69. return(1);
  70. }
  71. }
  72. /***********************************************************
  73. Compares two pairs of ulints. */
  74. UNIV_INLINE
  75. int
  76. ut_pair_cmp(
  77. /*========*/
  78. /* out: -1 if a < b, 0 if a == b, 1 if a > b */ 
  79. ulint a1, /* in: more significant part of first pair */
  80. ulint a2, /* in: less significant part of first pair */
  81. ulint b1, /* in: more significant part of second pair */
  82. ulint b2) /* in: less significant part of second pair */
  83. {
  84. if (a1 > b1) {
  85. return(1);
  86. } else if (a1 < b1) {
  87. return(-1);
  88. } else if (a2 > b2) {
  89. return(1);
  90. } else if (a2 < b2) {
  91. return(-1);
  92. } else {
  93. return(0);
  94. }
  95. }
  96. /*****************************************************************
  97. Calculates fast the remainder when divided by a power of two. */
  98. UNIV_INLINE
  99. ulint
  100. ut_2pow_remainder(
  101. /*==============*/ /* out: remainder */
  102. ulint n, /* in: number to be divided */
  103. ulint m) /* in: divisor; power of 2 */
  104. {
  105. ut_ad(0x80000000UL % m == 0);
  106. return(n & (m - 1));
  107. }
  108. /*****************************************************************
  109. Calculates fast a value rounded to a multiple of a power of 2. */
  110. UNIV_INLINE
  111. ulint
  112. ut_2pow_round(
  113. /*==========*/ /* out: value of n rounded down to nearest
  114. multiple of m */
  115. ulint n, /* in: number to be rounded */
  116. ulint m) /* in: divisor; power of 2 */
  117. {
  118. ut_ad(0x80000000UL % m == 0);
  119. return(n & ~(m - 1));
  120. }
  121. /*****************************************************************
  122. Calculates fast the 2-logarithm of a number, rounded upward to an
  123. integer. */
  124. UNIV_INLINE
  125. ulint
  126. ut_2_log(
  127. /*=====*/
  128. /* out: logarithm in the base 2, rounded upward */
  129. ulint n) /* in: number != 0 */
  130. {
  131. ulint res;
  132. res = 0;
  133. ut_ad(n > 0);
  134. n = n - 1;
  135. for (;;) {
  136. n = n / 2;
  137. if (n == 0) {
  138. break;
  139. }
  140. res++;
  141. }
  142. return(res + 1);
  143. }
  144. /*****************************************************************
  145. Calculates 2 to power n. */
  146. UNIV_INLINE
  147. ulint
  148. ut_2_exp(
  149. /*=====*/
  150. /* out: 2 to power n */
  151. ulint n) /* in: number */
  152. {
  153. return(1 << n);
  154. }