InnoDB Plugin  1.0
Data Structures | Macros | Typedefs | Functions
ut0ut.h File Reference
#include "univ.i"
#include "db0err.h"
#include "os0sync.h"
#include <time.h>
#include <ctype.h>
#include <stdarg.h>
#include "ut0ut.ic"
Include dependency graph for ut0ut.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  ut_when_dtor< F >

Macros

#define TEMP_INDEX_PREFIX   '\377'
#define TEMP_INDEX_PREFIX_STR   "\377"
#define UT_RELAX_CPU()   ((void)0) /* avoid warning for an empty statement */
#define UT_WAIT_FOR(cond, max_wait_us)
#define ut_is_2pow(n)   UNIV_LIKELY(!((n) & ((n) - 1)))
#define ut_2pow_remainder(n, m)   ((n) & ((m) - 1))
#define ut_2pow_round(n, m)   ((n) & ~((m) - 1))
#define ut_calc_align_down(n, m)   ut_2pow_round(n, m)
#define ut_calc_align(n, m)   (((n) + ((m) - 1)) & ~((m) - 1))
#define UT_BITS_IN_BYTES(b)   (((b) + 7) / 8)
#define ut_vsnprintf(buf, size, fmt, ap)   ((void) vsnprintf(buf, size, fmt, ap))
#define ut_snprintf   snprintf

Typedefs

typedef time_t ib_time_t

Functions

template<class T >
ut_min (T a, T b)
template<class T >
ut_max (T a, T b)
UNIV_INLINE ulint ut_min (ulint n1, ulint n2)
UNIV_INLINE ulint ut_max (ulint n1, ulint n2)
UNIV_INLINE void ut_pair_min (ulint *a, ulint *b, ulint a1, ulint b1, ulint a2, ulint b2)
UNIV_INLINE int ut_ulint_cmp (ulint a, ulint b)
UNIV_INLINE int ut_pair_cmp (ulint a1, ulint a2, ulint b1, ulint b2)
UNIV_INLINE ulint ut_2_log (ulint n)
UNIV_INLINE ulint ut_2_exp (ulint n)
UNIV_INTERN ulint ut_2_power_up (ulint n))
UNIV_INTERN ib_time_t ut_time (void)
UNIV_INTERN int ut_usectime (ulint *sec, ulint *ms)
UNIV_INTERN ullint ut_time_us (ullint *tloc)
UNIV_INTERN ulint ut_time_ms (void)
UNIV_INTERN double ut_difftime (ib_time_t time2, ib_time_t time1)
UNIV_INTERN void ut_print_timestamp (FILE *file) UNIV_COLD)
UNIV_INTERN void ut_sprintf_timestamp (char *buf)
UNIV_INTERN ulint ut_delay (ulint delay)
UNIV_INTERN void ut_print_buf (FILE *file, const void *buf, ulint len)
UNIV_INTERN void ut_print_filename (FILE *f, const char *name)
UNIV_INTERN void ut_print_name (FILE *f, const trx_t *trx, ibool table_id, const char *name)
UNIV_INTERN void ut_print_namel (FILE *f, const trx_t *trx, ibool table_id, const char *name, ulint namelen)
UNIV_INTERN char * ut_format_name (const char *name, ibool is_table, char *formatted, ulint formatted_size)
UNIV_INTERN void ut_copy_file (FILE *dest, FILE *src)
UNIV_INTERN const char * ut_strerr (dberr_t num)
UNIV_INTERN void ut_ulint_sort (ulint *arr, ulint *aux_arr, ulint low, ulint high))

Detailed Description

Various utilities

Created 1/20/1994 Heikki Tuuri

Macro Definition Documentation

#define TEMP_INDEX_PREFIX   '\377'

Index name prefix in fast index creation

#define TEMP_INDEX_PREFIX_STR   "\377"

Index name prefix in fast index creation, as a string constant

#define ut_2pow_remainder (   n,
 
)    ((n) & ((m) - 1))

Calculates fast the remainder of n/m when m is a power of two.

Parameters
nin: numerator
min: denominator, must be a power of two
Returns
the remainder of n/m
#define ut_2pow_round (   n,
 
)    ((n) & ~((m) - 1))

Calculates the biggest multiple of m that is not bigger than n when m is a power of two. In other words, rounds n down to m * k.

Parameters
nin: number to round down
min: alignment, must be a power of two
Returns
n rounded down to the biggest possible integer multiple of m
#define UT_BITS_IN_BYTES (   b)    (((b) + 7) / 8)
Determine how many bytes (groups of 8 bits) are needed to

store the given number of bits.

Parameters
bin: bits
Returns
number of bytes (octets) needed to represent b
#define ut_calc_align (   n,
 
)    (((n) + ((m) - 1)) & ~((m) - 1))

Calculates the smallest multiple of m that is not smaller than n when m is a power of two. In other words, rounds n up to m * k.

Parameters
nin: number to round up
min: alignment, must be a power of two
Returns
n rounded up to the smallest possible integer multiple of m
#define ut_calc_align_down (   n,
 
)    ut_2pow_round(n, m)
Align a number down to a multiple of a power of two.
Parameters
nin: number to round down
min: alignment, must be a power of two
Returns
n rounded down to the biggest possible integer multiple of m
#define ut_is_2pow (   n)    UNIV_LIKELY(!((n) & ((n) - 1)))

Determines if a number is zero or a power of two.

Parameters
nin: number
Returns
nonzero if n is zero or a power of two; zero otherwise
#define ut_snprintf   snprintf

A wrapper for snprintf(3), formatted output conversion into a limited buffer.

#define ut_vsnprintf (   buf,
  size,
  fmt,
  ap 
)    ((void) vsnprintf(buf, size, fmt, ap))

A wrapper for vsnprintf(3), formatted output conversion into a limited buffer. Note: this function DOES NOT return the number of characters that would have been printed if the buffer was unlimited because VC's _vsnprintf() returns -1 in this case and we would need to call _vscprintf() in addition to estimate that but we would need another copy of "ap" for that and VC does not provide va_copy().

#define UT_WAIT_FOR (   cond,
  max_wait_us 
)
Value:
do { \
ullint start_us; \
start_us = ut_time_us(NULL); \
while (!(cond) \
&& ut_time_us(NULL) - start_us < (max_wait_us)) {\
os_thread_sleep(2000 /* 2 ms */); \
} \
} while (0)

Delays execution for at most max_wait_us microseconds or returns earlier if cond becomes true.

Parameters
condin: condition to wait for; evaluated every 2 ms
max_wait_usin: maximum delay to wait, in microseconds

Typedef Documentation

typedef time_t ib_time_t

Time stamp

Function Documentation

UNIV_INLINE ulint ut_2_exp ( ulint  n)

Calculates 2 to power n.

Returns
2 to power n in: number

Calculates 2 to power n.

Returns
2 to power n
Parameters
nin: number
UNIV_INLINE ulint ut_2_log ( ulint  n)

Calculates fast the 2-logarithm of a number, rounded upward to an integer.

Returns
logarithm in the base 2, rounded upward in: number

Calculates fast the 2-logarithm of a number, rounded upward to an integer.

Returns
logarithm in the base 2, rounded upward
Parameters
nin: number != 0
UNIV_INTERN ulint ut_2_power_up ( ulint  n)

Calculates fast the number rounded up to the nearest power of 2.

Returns
first power of 2 which is >= n
Parameters
nin: number != 0
UNIV_INTERN void ut_copy_file ( FILE *  dest,
FILE *  src 
)

Catenate files. in: input file to be appended to output

Parameters
destin: output file
UNIV_INTERN ulint ut_delay ( ulint  delay)

Runs an idle loop on CPU. The argument gives the desired delay in microseconds on 100 MHz Pentium + Visual C++.

Returns
dummy value in: delay in microseconds on 100 MHz Pentium
UNIV_INTERN double ut_difftime ( ib_time_t  time2,
ib_time_t  time1 
)

Returns the difference of two times in seconds.

Returns
time2 - time1 expressed in seconds in: time
Parameters
time2in: time
UNIV_INTERN char* ut_format_name ( const char *  name,
ibool  is_table,
char *  formatted,
ulint  formatted_size 
)

Formats a table or index name, quoted as an SQL identifier. If the name contains a slash '/', the result will contain two identifiers separated by a period (.), as in SQL database_name.identifier.

Returns
pointer to 'formatted' out: no more than this number of bytes will be written to 'formatted'
Parameters
namein: table or index name, must be '\0'-terminated
is_tablein: if TRUE then 'name' is a table name
formattedout: formatted result, will be '\0'-terminated
UNIV_INLINE ulint ut_max ( ulint  n1,
ulint  n2 
)

Calculates the maximum of two ulints.

Returns
maximum in: second number

Calculates the maximum of two ulints.

Returns
maximum
Parameters
n1in: first number
n2in: second number
UNIV_INLINE ulint ut_min ( ulint  n1,
ulint  n2 
)

Calculates the minimum of two ulints.

Returns
minimum in: second number

Calculates the minimum of two ulints.

Returns
minimum
Parameters
n1in: first number
n2in: second number
UNIV_INLINE int ut_pair_cmp ( ulint  a1,
ulint  a2,
ulint  b1,
ulint  b2 
)

Compares two pairs of ulints.

Returns
-1 if a < b, 0 if a == b, 1 if a > b in: less significant part of second pair

Compares two pairs of ulints.

Returns
-1 if a < b, 0 if a == b, 1 if a > b
Parameters
a1in: more significant part of first pair
a2in: less significant part of first pair
b1in: more significant part of second pair
b2in: less significant part of second pair
UNIV_INLINE void ut_pair_min ( ulint *  a,
ulint *  b,
ulint  a1,
ulint  b1,
ulint  a2,
ulint  b2 
)

Calculates minimum of two ulint-pairs. in: less significant part of second pair

Calculates minimum of two ulint-pairs.

Parameters
aout: more significant part of minimum
bout: less significant part of minimum
a1in: more significant part of first pair
b1in: less significant part of first pair
a2in: more significant part of second pair
b2in: less significant part of second pair
UNIV_INTERN void ut_print_buf ( FILE *  file,
const void *  buf,
ulint  len 
)

Prints the contents of a memory buffer in hex and ascii. in: length of the buffer

Parameters
filein: file where to print
bufin: memory buffer
UNIV_INTERN void ut_print_filename ( FILE *  f,
const char *  name 
)

Outputs a NUL-terminated file name, quoted with apostrophes. in: name to print

Parameters
fin: output stream
UNIV_INTERN void ut_print_name ( FILE *  f,
const trx_t trx,
ibool  table_id,
const char *  name 
)

Outputs a fixed-length string, quoted as an SQL identifier. If the string contains a slash '/', the string will be output as two identifiers separated by a period (.), as in SQL database_name.identifier. in: name to print

Parameters
fin: output stream
trxin: transaction
table_idin: TRUE=print a table name, FALSE=print other identifier
UNIV_INTERN void ut_print_namel ( FILE *  f,
const trx_t trx,
ibool  table_id,
const char *  name,
ulint  namelen 
)

Outputs a fixed-length string, quoted as an SQL identifier. If the string contains a slash '/', the string will be output as two identifiers separated by a period (.), as in SQL database_name.identifier. in: length of name

Parameters
fin: output stream
trxin: transaction (NULL=no quotes)
table_idin: TRUE=print a table name, FALSE=print other identifier
namein: name to print
UNIV_INTERN void ut_print_timestamp ( FILE *  file)

Prints a timestamp to a file.

Parameters
filein: file where to print
UNIV_INTERN void ut_sprintf_timestamp ( char *  buf)

Sprintfs a timestamp to a buffer, 13..14 chars plus terminating NUL. in: buffer where to sprintf

UNIV_INTERN const char* ut_strerr ( dberr_t  num)

Convert an error number to a human readable text message. The returned string is static and should not be freed or modified.

Returns
string, describing the error in: error number
UNIV_INTERN ib_time_t ut_time ( 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.

Returns
system time
UNIV_INTERN ulint ut_time_ms ( void  )

Returns the number of milliseconds since some epoch. The value may wrap around. It should only be used for heuristic purposes.

Returns
ms since epoch
UNIV_INTERN ullint ut_time_us ( ullint *  tloc)

Returns the number of microseconds since epoch. Similar to time(3), the return value is also stored in *tloc, provided that tloc is non-NULL.

Returns
us since epoch out: us since epoch, if non-NULL
UNIV_INLINE int ut_ulint_cmp ( ulint  a,
ulint  b 
)

Compares two ulints.

Returns
1 if a > b, 0 if a == b, -1 if a < b in: ulint

Compares two ulints.

Returns
1 if a > b, 0 if a == b, -1 if a < b
Parameters
ain: ulint
bin: ulint
UNIV_INTERN void ut_ulint_sort ( ulint *  arr,
ulint *  aux_arr,
ulint  low,
ulint  high 
)
Parameters
arrin/out: array to sort
aux_arrin/out: aux array to use in sort
lowin: lower bound
highin: upper bound
UNIV_INTERN int ut_usectime ( ulint *  sec,
ulint *  ms 
)

Returns system time. Upon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

Returns
0 on success, -1 otherwise out: microseconds since the Epoch+*sec
Parameters
secout: seconds since the Epoch