~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to storage/innobase/ut/ut0rnd.c

  • Committer: Brian Aker
  • Date: 2010-02-07 01:33:54 UTC
  • Revision ID: brian@gaz-20100207013354-d2pg1n68u5c09pgo
Remove giant include header to its own file.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*******************************************************************
2
 
Random numbers and hashing
3
 
 
4
 
(c) 1994, 1995 Innobase Oy
5
 
 
6
 
Created 5/11/1994 Heikki Tuuri
7
 
********************************************************************/
8
 
 
9
 
#include "ut0rnd.h"
10
 
 
11
 
#ifdef UNIV_NONINL
12
 
#include "ut0rnd.ic"
13
 
#endif
14
 
 
15
 
/* These random numbers are used in ut_find_prime */
16
 
#define UT_RANDOM_1     1.0412321
17
 
#define UT_RANDOM_2     1.1131347
18
 
#define UT_RANDOM_3     1.0132677
19
 
 
20
 
 
21
 
ulint   ut_rnd_ulint_counter = 65654363;
22
 
 
23
 
/***************************************************************
24
 
Looks for a prime number slightly greater than the given argument.
25
 
The prime is chosen so that it is not near any power of 2. */
26
 
 
27
 
ulint
28
 
ut_find_prime(
29
 
/*==========*/
30
 
                        /* out: prime */
31
 
        ulint   n)      /* in: positive number > 100 */
32
 
{
33
 
        ulint   pow2;
34
 
        ulint   i;
35
 
 
36
 
        n += 100;
37
 
 
38
 
        pow2 = 1;
39
 
        while (pow2 * 2 < n) {
40
 
                pow2 = 2 * pow2;
41
 
        }
42
 
 
43
 
        if ((double)n < 1.05 * (double)pow2) {
44
 
                n = (ulint) ((double)n * UT_RANDOM_1);
45
 
        }
46
 
 
47
 
        pow2 = 2 * pow2;
48
 
 
49
 
        if ((double)n > 0.95 * (double)pow2) {
50
 
                n = (ulint) ((double)n * UT_RANDOM_2);
51
 
        }
52
 
 
53
 
        if (n > pow2 - 20) {
54
 
                n += 30;
55
 
        }
56
 
 
57
 
        /* Now we have n far enough from powers of 2. To make
58
 
        n more random (especially, if it was not near
59
 
        a power of 2), we then multiply it by a random number. */
60
 
 
61
 
        n = (ulint) ((double)n * UT_RANDOM_3);
62
 
 
63
 
        for (;; n++) {
64
 
                i = 2;
65
 
                while (i * i <= n) {
66
 
                        if (n % i == 0) {
67
 
                                goto next_n;
68
 
                        }
69
 
                        i++;
70
 
                }
71
 
 
72
 
                /* Found a prime */
73
 
                break;
74
 
next_n:         ;
75
 
        }
76
 
 
77
 
        return(n);
78
 
}