mirror of
https://github.com/MariaDB/server.git
synced 2025-01-21 06:22:28 +01:00
1d1dc31a06
symbols. Use it for all definitions of non-static variables and functions. lexyy.c, make_flex.sh: Declare yylex as UNIV_INTERN, not static. It is referenced from pars0grm.c. Actually, according to nm .libs/ha_innodb.so|grep -w '[ABCE-TVXYZ]' the following symbols are still global: * The vtable for class ha_innodb * pars0grm.c: The function yyparse() and the variables yychar, yylval, yynerrs The required changes to the Bison-generated file pars0grm.c will be addressed in a separate commit, which will add a script similar to make_flex.sh. The class ha_innodb is renamed from class ha_innobase by a #define. Thus, there will be no clash with the builtin InnoDB. However, there will be some overhead for invoking virtual methods of class ha_innodb. Ideas for making the vtable hidden are welcome. -fvisibility=hidden is not available in GCC 3.
78 lines
1.4 KiB
C
78 lines
1.4 KiB
C
/*******************************************************************
|
|
Random numbers and hashing
|
|
|
|
(c) 1994, 1995 Innobase Oy
|
|
|
|
Created 5/11/1994 Heikki Tuuri
|
|
********************************************************************/
|
|
|
|
#include "ut0rnd.h"
|
|
|
|
#ifdef UNIV_NONINL
|
|
#include "ut0rnd.ic"
|
|
#endif
|
|
|
|
/* These random numbers are used in ut_find_prime */
|
|
#define UT_RANDOM_1 1.0412321
|
|
#define UT_RANDOM_2 1.1131347
|
|
#define UT_RANDOM_3 1.0132677
|
|
|
|
|
|
ulint ut_rnd_ulint_counter = 65654363;
|
|
|
|
/***************************************************************
|
|
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. */
|
|
UNIV_INTERN
|
|
ulint
|
|
ut_find_prime(
|
|
/*==========*/
|
|
/* out: prime */
|
|
ulint n) /* in: positive number > 100 */
|
|
{
|
|
ulint pow2;
|
|
ulint i;
|
|
|
|
n += 100;
|
|
|
|
pow2 = 1;
|
|
while (pow2 * 2 < n) {
|
|
pow2 = 2 * pow2;
|
|
}
|
|
|
|
if ((double)n < 1.05 * (double)pow2) {
|
|
n = (ulint) ((double)n * UT_RANDOM_1);
|
|
}
|
|
|
|
pow2 = 2 * pow2;
|
|
|
|
if ((double)n > 0.95 * (double)pow2) {
|
|
n = (ulint) ((double)n * UT_RANDOM_2);
|
|
}
|
|
|
|
if (n > pow2 - 20) {
|
|
n += 30;
|
|
}
|
|
|
|
/* Now we have n far enough from powers of 2. To make
|
|
n more random (especially, if it was not near
|
|
a power of 2), we then multiply it by a random number. */
|
|
|
|
n = (ulint) ((double)n * UT_RANDOM_3);
|
|
|
|
for (;; n++) {
|
|
i = 2;
|
|
while (i * i <= n) {
|
|
if (n % i == 0) {
|
|
goto next_n;
|
|
}
|
|
i++;
|
|
}
|
|
|
|
/* Found a prime */
|
|
break;
|
|
next_n: ;
|
|
}
|
|
|
|
return(n);
|
|
}
|