ut0ut.ic
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:4k
- /******************************************************************
- Various utilities
- (c) 1994, 1995 Innobase Oy
- Created 5/30/1994 Heikki Tuuri
- *******************************************************************/
- /**********************************************************
- Calculates the minimum of two ulints. */
- UNIV_INLINE
- ulint
- ut_min(
- /*===*/
- /* out: minimum */
- ulint n1, /* in: first number */
- ulint n2) /* in: second number */
- {
- return((n1 <= n2) ? n1 : n2);
- }
- /**********************************************************
- Calculates the maximum of two ulints. */
- UNIV_INLINE
- ulint
- ut_max(
- /*===*/
- /* out: maximum */
- ulint n1, /* in: first number */
- ulint n2) /* in: second number */
- {
- return((n1 <= n2) ? n2 : n1);
- }
- /********************************************************************
- Calculates minimum of two ulint-pairs. */
- UNIV_INLINE
- void
- ut_pair_min(
- /*========*/
- ulint* a, /* out: more significant part of minimum */
- ulint* b, /* out: less significant part of minimum */
- ulint a1, /* in: more significant part of first pair */
- ulint b1, /* in: less significant part of first pair */
- ulint a2, /* in: more significant part of second pair */
- ulint b2) /* in: less significant part of second pair */
- {
- if (a1 == a2) {
- *a = a1;
- *b = ut_min(b1, b2);
- } else if (a1 < a2) {
- *a = a1;
- *b = b1;
- } else {
- *a = a2;
- *b = b2;
- }
- }
- /**********************************************************
- Compares two ulints. */
- UNIV_INLINE
- int
- ut_ulint_cmp(
- /*=========*/
- /* out: 1 if a > b, 0 if a == b, -1 if a < b */
- ulint a, /* in: ulint */
- ulint b) /* in: ulint */
- {
- if (a < b) {
- return(-1);
- } else if (a == b) {
- return(0);
- } else {
- return(1);
- }
- }
- /***********************************************************
- Compares two pairs of ulints. */
- UNIV_INLINE
- int
- ut_pair_cmp(
- /*========*/
- /* out: -1 if a < b, 0 if a == b, 1 if a > b */
- ulint a1, /* in: more significant part of first pair */
- ulint a2, /* in: less significant part of first pair */
- ulint b1, /* in: more significant part of second pair */
- ulint b2) /* in: less significant part of second pair */
- {
- if (a1 > b1) {
- return(1);
- } else if (a1 < b1) {
- return(-1);
- } else if (a2 > b2) {
- return(1);
- } else if (a2 < b2) {
- return(-1);
- } else {
- return(0);
- }
- }
- /*****************************************************************
- Calculates fast the remainder when divided by a power of two. */
- UNIV_INLINE
- ulint
- ut_2pow_remainder(
- /*==============*/ /* out: remainder */
- ulint n, /* in: number to be divided */
- ulint m) /* in: divisor; power of 2 */
- {
- ut_ad(0x80000000UL % m == 0);
- return(n & (m - 1));
- }
- /*****************************************************************
- Calculates fast a value rounded to a multiple of a power of 2. */
- UNIV_INLINE
- ulint
- ut_2pow_round(
- /*==========*/ /* out: value of n rounded down to nearest
- multiple of m */
- ulint n, /* in: number to be rounded */
- ulint m) /* in: divisor; power of 2 */
- {
- ut_ad(0x80000000UL % m == 0);
- return(n & ~(m - 1));
- }
- /*****************************************************************
- Calculates fast the 2-logarithm of a number, rounded upward to an
- integer. */
- UNIV_INLINE
- ulint
- ut_2_log(
- /*=====*/
- /* out: logarithm in the base 2, rounded upward */
- ulint n) /* in: number != 0 */
- {
- ulint res;
- res = 0;
- ut_ad(n > 0);
- n = n - 1;
- for (;;) {
- n = n / 2;
- if (n == 0) {
- break;
- }
- res++;
- }
- return(res + 1);
- }
- /*****************************************************************
- Calculates 2 to power n. */
- UNIV_INLINE
- ulint
- ut_2_exp(
- /*=====*/
- /* out: 2 to power n */
- ulint n) /* in: number */
- {
- return(1 << n);
- }