mariadb/innobase/include/ut0ut.h

182 lines
5.2 KiB
C
Raw Normal View History

/**********************************************************************
Various utilities
(c) 1994, 1995 Innobase Oy
Created 1/20/1994 Heikki Tuuri
***********************************************************************/
#ifndef ut0ut_h
#define ut0ut_h
#include "univ.i"
#include <time.h>
Portability fixes. Let myisamchk generate a new checksum for compressed data. Don't unconditionally force filenames to lower case on windows. Update mysqltest to match 4.0 source (to get some of the new bug fixes into 3.23) Docs/manual.texi: Link changes, and new comments about IA64 and about Sun workshop client/mysqltest.c: Updated this to match the 4.0 source include/config-win.h: Don't unconditionally force filenames to lower case on windows. innobase/include/ut0ut.h: Portability fix myisam/mi_cache.c: Fix problem where reported error number was -1 myisam/mi_check.c: Let myisamchk generate a new checksum for compressed data. myisam/mi_packrec.c: Cleanup myisam/myisamchk.c: Report checksum for compressed tables mysql-test/t/bdb.test: Fix to match new mysqltest mysql-test/t/err000001.test: Fix to match new mysqltest mysql-test/t/fulltext.test: Fix to match new mysqltest mysql-test/t/innodb.test: Fix to match new mysqltest mysql-test/t/overflow.test: Fix to match new mysqltest sql/ha_gemini.cc: Fix false -> FALSE sql/share/estonian/errmsg.txt: Updated of translation sql/share/swedish/errmsg.txt: Updated of translation sql/sql_parse.cc: Don't unconditionally force filenames to lower case on windows. sql/sql_table.cc: Don't unconditionally force filenames to lower case on windows. sql/sql_test.cc: Write current directory when using 'mysqladmin debug' strings/strto.c: Portability fix strings/strtoll.c: Portability fix strings/strtoul.c: Portability fix strings/strtoull.c: Portability fix
2001-08-18 10:49:00 +03:00
#ifndef MYSQL_SERVER
srv0srv.h Support raw disk partitions as data files srv0start.c Support raw disk partitions as data files srv0srv.c Support raw disk partitions as data files row0purge.c < 4 GB rows, doublewrite, hang fixes row0row.c < 4 GB rows, doublewrite, hang fixes row0sel.c < 4 GB rows, doublewrite, hang fixes row0uins.c < 4 GB rows, doublewrite, hang fixes row0umod.c < 4 GB rows, doublewrite, hang fixes row0undo.c < 4 GB rows, doublewrite, hang fixes row0upd.c < 4 GB rows, doublewrite, hang fixes srv0srv.c < 4 GB rows, doublewrite, hang fixes srv0start.c < 4 GB rows, doublewrite, hang fixes sync0rw.c < 4 GB rows, doublewrite, hang fixes sync0sync.c < 4 GB rows, doublewrite, hang fixes trx0purge.c < 4 GB rows, doublewrite, hang fixes trx0rec.c < 4 GB rows, doublewrite, hang fixes trx0sys.c < 4 GB rows, doublewrite, hang fixes btr0btr.c < 4 GB rows, doublewrite, hang fixes btr0cur.c < 4 GB rows, doublewrite, hang fixes buf0buf.c < 4 GB rows, doublewrite, hang fixes buf0flu.c < 4 GB rows, doublewrite, hang fixes buf0rea.c < 4 GB rows, doublewrite, hang fixes data0data.c < 4 GB rows, doublewrite, hang fixes fil0fil.c < 4 GB rows, doublewrite, hang fixes fsp0fsp.c < 4 GB rows, doublewrite, hang fixes ibuf0ibuf.c < 4 GB rows, doublewrite, hang fixes lock0lock.c < 4 GB rows, doublewrite, hang fixes log0log.c < 4 GB rows, doublewrite, hang fixes log0recv.c < 4 GB rows, doublewrite, hang fixes os0file.c < 4 GB rows, doublewrite, hang fixes page0cur.c < 4 GB rows, doublewrite, hang fixes pars0pars.c < 4 GB rows, doublewrite, hang fixes rem0cmp.c < 4 GB rows, doublewrite, hang fixes rem0rec.c < 4 GB rows, doublewrite, hang fixes row0ins.c < 4 GB rows, doublewrite, hang fixes row0mysql.c < 4 GB rows, doublewrite, hang fixes univ.i < 4 GB rows, doublewrite, hang fixes data0data.ic < 4 GB rows, doublewrite, hang fixes mach0data.ic < 4 GB rows, doublewrite, hang fixes rem0rec.ic < 4 GB rows, doublewrite, hang fixes row0upd.ic < 4 GB rows, doublewrite, hang fixes trx0rec.ic < 4 GB rows, doublewrite, hang fixes rem0cmp.h < 4 GB rows, doublewrite, hang fixes rem0rec.h < 4 GB rows, doublewrite, hang fixes row0ins.h < 4 GB rows, doublewrite, hang fixes row0mysql.h < 4 GB rows, doublewrite, hang fixes row0row.h < 4 GB rows, doublewrite, hang fixes row0upd.h < 4 GB rows, doublewrite, hang fixes srv0srv.h < 4 GB rows, doublewrite, hang fixes sync0sync.h < 4 GB rows, doublewrite, hang fixes trx0rec.h < 4 GB rows, doublewrite, hang fixes trx0sys.h < 4 GB rows, doublewrite, hang fixes trx0types.h < 4 GB rows, doublewrite, hang fixes trx0undo.h < 4 GB rows, doublewrite, hang fixes ut0dbg.h < 4 GB rows, doublewrite, hang fixes ut0ut.h < 4 GB rows, doublewrite, hang fixes btr0btr.h < 4 GB rows, doublewrite, hang fixes btr0cur.h < 4 GB rows, doublewrite, hang fixes buf0buf.h < 4 GB rows, doublewrite, hang fixes buf0flu.h < 4 GB rows, doublewrite, hang fixes data0data.h < 4 GB rows, doublewrite, hang fixes dict0mem.h < 4 GB rows, doublewrite, hang fixes fil0fil.h < 4 GB rows, doublewrite, hang fixes fsp0fsp.h < 4 GB rows, doublewrite, hang fixes os0file.h < 4 GB rows, doublewrite, hang fixes innobase/include/btr0btr.h: < 4 GB rows, doublewrite, hang fixes innobase/include/btr0cur.h: < 4 GB rows, doublewrite, hang fixes innobase/include/buf0buf.h: < 4 GB rows, doublewrite, hang fixes innobase/include/buf0flu.h: < 4 GB rows, doublewrite, hang fixes innobase/include/data0data.h: < 4 GB rows, doublewrite, hang fixes innobase/include/dict0mem.h: < 4 GB rows, doublewrite, hang fixes innobase/include/fil0fil.h: < 4 GB rows, doublewrite, hang fixes innobase/include/fsp0fsp.h: < 4 GB rows, doublewrite, hang fixes innobase/include/os0file.h: < 4 GB rows, doublewrite, hang fixes innobase/include/rem0cmp.h: < 4 GB rows, doublewrite, hang fixes innobase/include/rem0rec.h: < 4 GB rows, doublewrite, hang fixes innobase/include/row0ins.h: < 4 GB rows, doublewrite, hang fixes innobase/include/row0mysql.h: < 4 GB rows, doublewrite, hang fixes innobase/include/row0row.h: < 4 GB rows, doublewrite, hang fixes innobase/include/row0upd.h: < 4 GB rows, doublewrite, hang fixes innobase/include/sync0sync.h: < 4 GB rows, doublewrite, hang fixes innobase/include/trx0rec.h: < 4 GB rows, doublewrite, hang fixes innobase/include/trx0sys.h: < 4 GB rows, doublewrite, hang fixes innobase/include/trx0types.h: < 4 GB rows, doublewrite, hang fixes innobase/include/trx0undo.h: < 4 GB rows, doublewrite, hang fixes innobase/include/ut0dbg.h: < 4 GB rows, doublewrite, hang fixes innobase/include/ut0ut.h: < 4 GB rows, doublewrite, hang fixes innobase/include/data0data.ic: < 4 GB rows, doublewrite, hang fixes innobase/include/mach0data.ic: < 4 GB rows, doublewrite, hang fixes innobase/include/rem0rec.ic: < 4 GB rows, doublewrite, hang fixes innobase/include/row0upd.ic: < 4 GB rows, doublewrite, hang fixes innobase/include/trx0rec.ic: < 4 GB rows, doublewrite, hang fixes innobase/include/univ.i: < 4 GB rows, doublewrite, hang fixes innobase/btr/btr0btr.c: < 4 GB rows, doublewrite, hang fixes innobase/btr/btr0cur.c: < 4 GB rows, doublewrite, hang fixes innobase/buf/buf0buf.c: < 4 GB rows, doublewrite, hang fixes innobase/buf/buf0flu.c: < 4 GB rows, doublewrite, hang fixes innobase/buf/buf0rea.c: < 4 GB rows, doublewrite, hang fixes innobase/data/data0data.c: < 4 GB rows, doublewrite, hang fixes innobase/fil/fil0fil.c: < 4 GB rows, doublewrite, hang fixes innobase/fsp/fsp0fsp.c: < 4 GB rows, doublewrite, hang fixes innobase/ibuf/ibuf0ibuf.c: < 4 GB rows, doublewrite, hang fixes innobase/lock/lock0lock.c: < 4 GB rows, doublewrite, hang fixes innobase/log/log0log.c: < 4 GB rows, doublewrite, hang fixes innobase/log/log0recv.c: < 4 GB rows, doublewrite, hang fixes innobase/os/os0file.c: < 4 GB rows, doublewrite, hang fixes innobase/page/page0cur.c: < 4 GB rows, doublewrite, hang fixes innobase/pars/pars0pars.c: < 4 GB rows, doublewrite, hang fixes innobase/rem/rem0cmp.c: < 4 GB rows, doublewrite, hang fixes innobase/rem/rem0rec.c: < 4 GB rows, doublewrite, hang fixes innobase/row/row0ins.c: < 4 GB rows, doublewrite, hang fixes innobase/row/row0mysql.c: < 4 GB rows, doublewrite, hang fixes innobase/row/row0purge.c: < 4 GB rows, doublewrite, hang fixes innobase/row/row0row.c: < 4 GB rows, doublewrite, hang fixes innobase/row/row0sel.c: < 4 GB rows, doublewrite, hang fixes innobase/row/row0uins.c: < 4 GB rows, doublewrite, hang fixes innobase/row/row0umod.c: < 4 GB rows, doublewrite, hang fixes innobase/row/row0undo.c: < 4 GB rows, doublewrite, hang fixes innobase/row/row0upd.c: < 4 GB rows, doublewrite, hang fixes innobase/sync/sync0rw.c: < 4 GB rows, doublewrite, hang fixes innobase/sync/sync0sync.c: < 4 GB rows, doublewrite, hang fixes innobase/trx/trx0purge.c: < 4 GB rows, doublewrite, hang fixes innobase/trx/trx0rec.c: < 4 GB rows, doublewrite, hang fixes innobase/trx/trx0sys.c: < 4 GB rows, doublewrite, hang fixes innobase/srv/srv0srv.c: Support raw disk partitions as data files innobase/srv/srv0start.c: Support raw disk partitions as data files innobase/include/srv0srv.h: Support raw disk partitions as data files
2001-08-04 19:36:14 +03:00
#include <ctype.h>
Portability fixes. Let myisamchk generate a new checksum for compressed data. Don't unconditionally force filenames to lower case on windows. Update mysqltest to match 4.0 source (to get some of the new bug fixes into 3.23) Docs/manual.texi: Link changes, and new comments about IA64 and about Sun workshop client/mysqltest.c: Updated this to match the 4.0 source include/config-win.h: Don't unconditionally force filenames to lower case on windows. innobase/include/ut0ut.h: Portability fix myisam/mi_cache.c: Fix problem where reported error number was -1 myisam/mi_check.c: Let myisamchk generate a new checksum for compressed data. myisam/mi_packrec.c: Cleanup myisam/myisamchk.c: Report checksum for compressed tables mysql-test/t/bdb.test: Fix to match new mysqltest mysql-test/t/err000001.test: Fix to match new mysqltest mysql-test/t/fulltext.test: Fix to match new mysqltest mysql-test/t/innodb.test: Fix to match new mysqltest mysql-test/t/overflow.test: Fix to match new mysqltest sql/ha_gemini.cc: Fix false -> FALSE sql/share/estonian/errmsg.txt: Updated of translation sql/share/swedish/errmsg.txt: Updated of translation sql/sql_parse.cc: Don't unconditionally force filenames to lower case on windows. sql/sql_table.cc: Don't unconditionally force filenames to lower case on windows. sql/sql_test.cc: Write current directory when using 'mysqladmin debug' strings/strto.c: Portability fix strings/strtoll.c: Portability fix strings/strtoul.c: Portability fix strings/strtoull.c: Portability fix
2001-08-18 10:49:00 +03:00
#endif
typedef time_t ib_time_t;
/**********************************************************
Calculates the minimum of two ulints. */
UNIV_INLINE
ulint
ut_min(
/*===*/
/* out: minimum */
ulint n1, /* in: first number */
ulint n2); /* in: second number */
/**********************************************************
Calculates the maximum of two ulints. */
UNIV_INLINE
ulint
ut_max(
/*===*/
/* out: maximum */
ulint n1, /* in: first number */
ulint n2); /* in: second number */
/********************************************************************
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 */
/**********************************************************
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 */
/***********************************************************
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 */
/*****************************************************************
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 */
/*****************************************************************
Calculates fast 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 */
/*****************************************************************
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 */
/*****************************************************************
Calculates 2 to power n. */
UNIV_INLINE
ulint
ut_2_exp(
/*=====*/
/* out: 2 to power n */
ulint n); /* in: number */
/*****************************************************************
Calculates fast the number rounded up to the nearest power of 2. */
UNIV_INLINE
ulint
ut_2_power_up(
/*==========*/
/* out: first power of 2 which is >= n */
ulint n); /* in: number != 0 */
/****************************************************************
Sort function for ulint arrays. */
void
ut_ulint_sort(ulint* arr, ulint* aux_arr, ulint low, ulint high);
/*============================================================*/
/************************************************************
The following function returns a clock time in milliseconds. */
ulint
ut_clock(void);
/**************************************************************
Returns system time. We do not specify the format of the time returned:
the only way to manipulate it is to use the function ut_difftime. */
ib_time_t
ut_time(void);
/*=========*/
/**************************************************************
Returns the difference of two times in seconds. */
double
ut_difftime(
/*========*/
/* out: time2 - time1 expressed in seconds */
ib_time_t time2, /* in: time */
ib_time_t time1); /* in: time */
/**************************************************************
Prints a timestamp to a file. */
void
ut_print_timestamp(
/*===============*/
FILE* file); /* in: file where to print */
/*****************************************************************
Runs an idle loop on CPU. The argument gives the desired delay
in microseconds on 100 MHz Pentium + Visual C++. */
ulint
ut_delay(
/*=====*/
/* out: dummy value */
ulint delay); /* in: delay in microseconds on 100 MHz Pentium */
/*****************************************************************
Prints the contents of a memory buffer in hex and ascii. */
void
ut_print_buf(
/*=========*/
byte* buf, /* in: memory buffer */
ulint len); /* in: length of the buffer */
/*****************************************************************
Prints the contents of a memory buffer in hex and ascii. */
ulint
ut_sprintf_buf(
/*===========*/
/* out: printed length in bytes */
char* str, /* in: buffer to print to */
byte* buf, /* in: memory buffer */
ulint len); /* in: length of the buffer */
#ifndef UNIV_NONINL
#include "ut0ut.ic"
#endif
#endif