~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/innobase/include/ut0byte.h

  • Committer: Lee Bieber
  • Date: 2010-12-03 01:16:19 UTC
  • mfrom: (1819.9.81 update-innobase)
  • Revision ID: kalebral@gmail.com-20101203011619-n6v584rijwdet05b
Merge Stewart - update Innobase plugin based on InnoDB 1.1.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
#define ut0byte_h
28
28
 
29
29
 
 
30
 
30
31
#include "univ.i"
31
32
 
32
 
/** Pair of ulint integers. */
33
 
typedef struct dulint_struct    dulint;
34
 
/** Type definition for a 64-bit unsigned integer, which works also
35
 
in 32-bit machines. NOTE! Access the fields only with the accessor
36
 
functions. This definition appears here only for the compiler to
37
 
know the size of a dulint. */
38
 
struct dulint_struct{
39
 
        ulint   high;   /*!< most significant 32 bits */
40
 
        ulint   low;    /*!< least significant 32 bits */
41
 
};
42
 
 
43
 
/** Zero value for a dulint */
44
 
extern const dulint     ut_dulint_zero;
45
 
 
46
 
/** Maximum value for a dulint */
47
 
extern const dulint     ut_dulint_max;
48
 
 
49
33
/*******************************************************//**
50
 
Creates a 64-bit dulint out of two ulints.
 
34
Creates a 64-bit integer out of two 32-bit integers.
51
35
@return created dulint */
52
36
UNIV_INLINE
53
 
dulint
54
 
ut_dulint_create(
55
 
/*=============*/
 
37
ib_uint64_t
 
38
ut_ull_create(
 
39
/*==========*/
56
40
        ulint   high,   /*!< in: high-order 32 bits */
57
 
        ulint   low);   /*!< in: low-order 32 bits */
58
 
/*******************************************************//**
59
 
Gets the high-order 32 bits of a dulint.
60
 
@return 32 bits in ulint */
61
 
UNIV_INLINE
62
 
ulint
63
 
ut_dulint_get_high(
64
 
/*===============*/
65
 
        dulint  d);     /*!< in: dulint */
66
 
/*******************************************************//**
67
 
Gets the low-order 32 bits of a dulint.
68
 
@return 32 bits in ulint */
69
 
UNIV_INLINE
70
 
ulint
71
 
ut_dulint_get_low(
72
 
/*==============*/
73
 
        dulint  d);     /*!< in: dulint */
74
 
/*******************************************************//**
75
 
Converts a dulint (a struct of 2 ulints) to ib_int64_t, which is a 64-bit
76
 
integer type.
77
 
@return value in ib_int64_t type */
78
 
UNIV_INLINE
79
 
ib_int64_t
80
 
ut_conv_dulint_to_longlong(
81
 
/*=======================*/
82
 
        dulint  d);     /*!< in: dulint */
83
 
/*******************************************************//**
84
 
Tests if a dulint is zero.
85
 
@return TRUE if zero */
86
 
UNIV_INLINE
87
 
ibool
88
 
ut_dulint_is_zero(
89
 
/*==============*/
90
 
        dulint  a);     /*!< in: dulint */
91
 
/*******************************************************//**
92
 
Compares two dulints.
93
 
@return -1 if a < b, 0 if a == b, 1 if a > b */
94
 
UNIV_INLINE
95
 
int
96
 
ut_dulint_cmp(
97
 
/*==========*/
98
 
        dulint  a,      /*!< in: dulint */
99
 
        dulint  b);     /*!< in: dulint */
100
 
/*******************************************************//**
101
 
Calculates the max of two dulints.
102
 
@return max(a, b) */
103
 
UNIV_INLINE
104
 
dulint
105
 
ut_dulint_get_max(
106
 
/*==============*/
107
 
        dulint  a,      /*!< in: dulint */
108
 
        dulint  b);     /*!< in: dulint */
109
 
/*******************************************************//**
110
 
Calculates the min of two dulints.
111
 
@return min(a, b) */
112
 
UNIV_INLINE
113
 
dulint
114
 
ut_dulint_get_min(
115
 
/*==============*/
116
 
        dulint  a,      /*!< in: dulint */
117
 
        dulint  b);     /*!< in: dulint */
118
 
/*******************************************************//**
119
 
Adds a ulint to a dulint.
120
 
@return sum a + b */
121
 
UNIV_INLINE
122
 
dulint
123
 
ut_dulint_add(
124
 
/*==========*/
125
 
        dulint  a,      /*!< in: dulint */
126
 
        ulint   b);     /*!< in: ulint */
127
 
/*******************************************************//**
128
 
Subtracts a ulint from a dulint.
129
 
@return a - b */
130
 
UNIV_INLINE
131
 
dulint
132
 
ut_dulint_subtract(
133
 
/*===============*/
134
 
        dulint  a,      /*!< in: dulint */
135
 
        ulint   b);     /*!< in: ulint, b <= a */
136
 
/*******************************************************//**
137
 
Subtracts a dulint from another. NOTE that the difference must be positive
138
 
and smaller that 4G.
139
 
@return a - b */
140
 
UNIV_INLINE
141
 
ulint
142
 
ut_dulint_minus(
143
 
/*============*/
144
 
        dulint  a,      /*!< in: dulint; NOTE a must be >= b and at most
145
 
                        2 to power 32 - 1 greater */
146
 
        dulint  b);     /*!< in: dulint */
147
 
/********************************************************//**
148
 
Rounds a dulint downward to a multiple of a power of 2.
149
 
@return rounded value */
150
 
UNIV_INLINE
151
 
dulint
152
 
ut_dulint_align_down(
153
 
/*=================*/
154
 
        dulint   n,             /*!< in: number to be rounded */
155
 
        ulint    align_no);     /*!< in: align by this number which must be a
156
 
                                power of 2 */
157
 
/********************************************************//**
158
 
Rounds a dulint upward to a multiple of a power of 2.
159
 
@return rounded value */
160
 
UNIV_INLINE
161
 
dulint
162
 
ut_dulint_align_up(
163
 
/*===============*/
164
 
        dulint   n,             /*!< in: number to be rounded */
165
 
        ulint    align_no);     /*!< in: align by this number which must be a
166
 
                                power of 2 */
167
 
/********************************************************//**
168
 
Rounds a dulint downward to a multiple of a power of 2.
 
41
        ulint   low)    /*!< in: low-order 32 bits */
 
42
        __attribute__((const));
 
43
 
 
44
/********************************************************//**
 
45
Rounds a 64-bit integer downward to a multiple of a power of 2.
169
46
@return rounded value */
170
47
UNIV_INLINE
171
48
ib_uint64_t
184
61
        ib_uint64_t      n,             /*!< in: number to be rounded */
185
62
        ulint            align_no);     /*!< in: align by this number
186
63
                                        which must be a power of 2 */
187
 
/*******************************************************//**
188
 
Increments a dulint variable by 1. */
189
 
#define UT_DULINT_INC(D)\
190
 
{\
191
 
        if ((D).low == 0xFFFFFFFFUL) {\
192
 
                (D).high = (D).high + 1;\
193
 
                (D).low = 0;\
194
 
        } else {\
195
 
                (D).low = (D).low + 1;\
196
 
        }\
197
 
}
198
 
/*******************************************************//**
199
 
Tests if two dulints are equal. */
200
 
#define UT_DULINT_EQ(D1, D2)    (((D1).low == (D2).low)\
201
 
                                                && ((D1).high == (D2).high))
202
 
#ifdef notdefined
203
 
/************************************************************//**
204
 
Sort function for dulint arrays. */
205
 
UNIV_INTERN
206
 
void
207
 
ut_dulint_sort(
208
 
/*===========*/
209
 
        dulint* arr,    /*!< in/out: array to be sorted */
210
 
        dulint* aux_arr,/*!< in/out: auxiliary array (same size as arr) */
211
 
        ulint   low,    /*!< in: low bound of sort interval, inclusive */
212
 
        ulint   high);  /*!< in: high bound of sort interval, noninclusive */
213
 
#endif /* notdefined */
214
 
 
215
64
/*********************************************************//**
216
65
The following function rounds up a pointer to the nearest aligned address.
217
66
@return aligned pointer */