mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
1081513a12
Merge 3.23.52 innobase/btr/btr0btr.c: Merge 3.23.52 innobase/btr/btr0cur.c: Merge 3.23.52 innobase/btr/btr0sea.c: Merge 3.23.52 innobase/include/btr0btr.h: Merge 3.23.52 innobase/include/btr0cur.h: Merge 3.23.52 innobase/include/btr0sea.h: Merge 3.23.52 innobase/include/buf0buf.h: Merge 3.23.52 innobase/include/buf0rea.h: Merge 3.23.52 innobase/include/data0data.h: Merge 3.23.52 innobase/include/data0data.ic: Merge 3.23.52 innobase/include/log0log.h: Merge 3.23.52 innobase/include/log0log.ic: Merge 3.23.52 innobase/include/os0file.h: Merge 3.23.52 innobase/include/page0page.h: Merge 3.23.52 innobase/include/page0page.ic: Merge 3.23.52 innobase/include/row0mysql.h: Merge 3.23.52 innobase/include/trx0roll.h: Merge 3.23.52 innobase/include/trx0sys.h: Merge 3.23.52 innobase/include/trx0trx.h: Merge 3.23.52 innobase/include/ut0ut.h: Merge 3.23.52 innobase/include/univ.i: Merge 3.23.52 innobase/include/ut0ut.ic: Merge 3.23.52 innobase/buf/buf0buf.c: Merge 3.23.52 innobase/buf/buf0rea.c: Merge 3.23.52 innobase/data/data0data.c: Merge 3.23.52 innobase/dict/dict0crea.c: Merge 3.23.52 innobase/dict/dict0dict.c: Merge 3.23.52 innobase/dict/dict0load.c: Merge 3.23.52 innobase/dict/dict0mem.c: Merge 3.23.52 innobase/fsp/fsp0fsp.c: Merge 3.23.52 innobase/ibuf/ibuf0ibuf.c: Merge 3.23.52 innobase/lock/lock0lock.c: Merge 3.23.52 innobase/log/log0log.c: Merge 3.23.52 innobase/log/log0recv.c: Merge 3.23.52 innobase/mtr/mtr0log.c: Merge 3.23.52 innobase/mtr/mtr0mtr.c: Merge 3.23.52 innobase/os/os0file.c: Merge 3.23.52 innobase/page/page0cur.c: Merge 3.23.52 innobase/page/page0page.c: Merge 3.23.52 innobase/rem/rem0cmp.c: Merge 3.23.52 innobase/row/row0ins.c: Merge 3.23.52 innobase/row/row0mysql.c: Merge 3.23.52 innobase/row/row0purge.c: Merge 3.23.52 innobase/row/row0upd.c: Merge 3.23.52 innobase/srv/srv0srv.c: Merge 3.23.52 innobase/srv/srv0start.c: Merge 3.23.52 innobase/trx/trx0roll.c: Merge 3.23.52 innobase/trx/trx0sys.c: Merge 3.23.52 innobase/trx/trx0trx.c: Merge 3.23.52 innobase/trx/trx0undo.c: Merge 3.23.52 innobase/ut/ut0mem.c: Merge 3.23.52 innobase/ut/ut0ut.c: Merge 3.23.52
174 lines
3.6 KiB
Text
174 lines
3.6 KiB
Text
/******************************************************************
|
|
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(0x80000000 % 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(0x80000000 % 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);
|
|
}
|