mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
d3c0752b6a
Merge InnoDB-3.23.50 innobase/btr/btr0btr.c: Merge InnoDB-3.23.50 innobase/btr/btr0cur.c: Merge InnoDB-3.23.50 innobase/btr/btr0sea.c: Merge InnoDB-3.23.50 innobase/buf/buf0buf.c: Merge InnoDB-3.23.50 innobase/buf/buf0flu.c: Merge InnoDB-3.23.50 innobase/dict/dict0dict.c: Merge InnoDB-3.23.50 innobase/dict/dict0load.c: Merge InnoDB-3.23.50 innobase/fil/fil0fil.c: Merge InnoDB-3.23.50 innobase/fsp/fsp0fsp.c: Merge InnoDB-3.23.50 innobase/include/buf0flu.h: Merge InnoDB-3.23.50 innobase/include/dict0dict.h: Merge InnoDB-3.23.50 innobase/include/fil0fil.h: Merge InnoDB-3.23.50 innobase/include/fsp0fsp.h: Merge InnoDB-3.23.50 innobase/include/log0log.h: Merge InnoDB-3.23.50 innobase/include/log0recv.h: Merge InnoDB-3.23.50 innobase/include/mem0mem.h: Merge InnoDB-3.23.50 innobase/include/os0file.h: Merge InnoDB-3.23.50 innobase/include/row0mysql.h: Merge InnoDB-3.23.50 innobase/include/srv0srv.h: Merge InnoDB-3.23.50 innobase/include/srv0start.h: Merge InnoDB-3.23.50 innobase/include/trx0sys.h: Merge InnoDB-3.23.50 innobase/include/ut0byte.h: Merge InnoDB-3.23.50 innobase/include/ut0rnd.h: Merge InnoDB-3.23.50 innobase/include/ut0ut.h: Merge InnoDB-3.23.50 innobase/log/log0log.c: Merge InnoDB-3.23.50 innobase/log/log0recv.c: Merge InnoDB-3.23.50 innobase/mem/mem0mem.c: Merge InnoDB-3.23.50 innobase/os/os0file.c: Merge InnoDB-3.23.50 innobase/rem/rem0cmp.c: Merge InnoDB-3.23.50 innobase/row/row0ins.c: Merge InnoDB-3.23.50 innobase/row/row0mysql.c: Merge InnoDB-3.23.50 innobase/row/row0sel.c: Merge InnoDB-3.23.50 innobase/row/row0upd.c: Merge InnoDB-3.23.50 innobase/srv/srv0srv.c: Merge InnoDB-3.23.50 innobase/srv/srv0start.c: Merge InnoDB-3.23.50 innobase/trx/trx0sys.c: Merge InnoDB-3.23.50 innobase/ut/ut0mem.c: Merge InnoDB-3.23.50 innobase/ut/ut0ut.c: Merge InnoDB-3.23.50 sql/ha_innobase.cc: Merge InnoDB-3.23.50 sql/ha_innobase.h: Merge InnoDB-3.23.50
121 lines
3.4 KiB
C
121 lines
3.4 KiB
C
/**********************************************************************
|
|
Random numbers and hashing
|
|
|
|
(c) 1994, 1995 Innobase Oy
|
|
|
|
Created 1/20/1994 Heikki Tuuri
|
|
***********************************************************************/
|
|
|
|
#ifndef ut0rnd_h
|
|
#define ut0rnd_h
|
|
|
|
#include "univ.i"
|
|
|
|
#include "ut0byte.h"
|
|
|
|
/* The 'character code' for end of field or string (used
|
|
in folding records */
|
|
#define UT_END_OF_FIELD 257
|
|
|
|
/************************************************************
|
|
This is used to set the random number seed. */
|
|
UNIV_INLINE
|
|
void
|
|
ut_rnd_set_seed(
|
|
/*============*/
|
|
ulint seed); /* in: seed */
|
|
/************************************************************
|
|
The following function generates a series of 'random' ulint integers. */
|
|
UNIV_INLINE
|
|
ulint
|
|
ut_rnd_gen_next_ulint(
|
|
/*==================*/
|
|
/* out: the next 'random' number */
|
|
ulint rnd); /* in: the previous random number value */
|
|
/*************************************************************
|
|
The following function generates 'random' ulint integers which
|
|
enumerate the value space (let there be N of them) of ulint integers
|
|
in a pseudo-random fashion. Note that the same integer is repeated
|
|
always after N calls to the generator. */
|
|
UNIV_INLINE
|
|
ulint
|
|
ut_rnd_gen_ulint(void);
|
|
/*==================*/
|
|
/* out: the 'random' number */
|
|
/************************************************************
|
|
Generates a random integer from a given interval. */
|
|
UNIV_INLINE
|
|
ulint
|
|
ut_rnd_interval(
|
|
/*============*/
|
|
/* out: the 'random' number */
|
|
ulint low, /* in: low limit; can generate also this value */
|
|
ulint high); /* in: high limit; can generate also this value */
|
|
/*************************************************************
|
|
Generates a random iboolean value. */
|
|
UNIV_INLINE
|
|
ibool
|
|
ut_rnd_gen_ibool(void);
|
|
/*=================*/
|
|
/* out: the random value */
|
|
/***********************************************************
|
|
The following function generates a hash value for a ulint integer
|
|
to a hash table of size table_size, which should be a prime or some
|
|
random number to work reliably. */
|
|
UNIV_INLINE
|
|
ulint
|
|
ut_hash_ulint(
|
|
/*=========*/
|
|
/* out: hash value */
|
|
ulint key, /* in: value to be hashed */
|
|
ulint table_size); /* in: hash table size */
|
|
/*****************************************************************
|
|
Folds a pair of ulints. */
|
|
UNIV_INLINE
|
|
ulint
|
|
ut_fold_ulint_pair(
|
|
/*===============*/
|
|
/* out: folded value */
|
|
ulint n1, /* in: ulint */
|
|
ulint n2); /* in: ulint */
|
|
/*****************************************************************
|
|
Folds a dulint. */
|
|
UNIV_INLINE
|
|
ulint
|
|
ut_fold_dulint(
|
|
/*===========*/
|
|
/* out: folded value */
|
|
dulint d); /* in: dulint */
|
|
/*****************************************************************
|
|
Folds a character string ending in the null character. */
|
|
UNIV_INLINE
|
|
ulint
|
|
ut_fold_string(
|
|
/*===========*/
|
|
/* out: folded value */
|
|
char* str); /* in: null-terminated string */
|
|
/*****************************************************************
|
|
Folds a binary string. */
|
|
UNIV_INLINE
|
|
ulint
|
|
ut_fold_binary(
|
|
/*===========*/
|
|
/* out: folded value */
|
|
byte* str, /* in: string of bytes */
|
|
ulint len); /* in: length */
|
|
/***************************************************************
|
|
Looks for a prime number slightly greater than the given argument.
|
|
The prime is chosen so that it is not near any power of 2. */
|
|
|
|
ulint
|
|
ut_find_prime(
|
|
/*==========*/
|
|
/* out: prime */
|
|
ulint n); /* in: positive number > 100 */
|
|
|
|
|
|
#ifndef UNIV_NONINL
|
|
#include "ut0rnd.ic"
|
|
#endif
|
|
|
|
#endif
|