~drizzle-trunk/drizzle/development

« back to all changes in this revision

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

  • Committer: Brian Aker
  • Date: 2010-10-28 17:12:01 UTC
  • mfrom: (1887.1.3 merge)
  • Revision ID: brian@tangent.org-20101028171201-baj6l1bnntn1s4ad
Merge in POTFILES changes.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*****************************************************************************
2
2
 
3
 
Copyright (C) 1994, 2009, Innobase Oy. All Rights Reserved.
 
3
Copyright (c) 1994, 2009, Innobase Oy. All Rights Reserved.
4
4
 
5
5
This program is free software; you can redistribute it and/or modify it under
6
6
the terms of the GNU General Public License as published by the Free Software
27
27
#define ut0byte_h
28
28
 
29
29
 
30
 
 
31
30
#include "univ.i"
32
31
 
 
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
 
33
49
/*******************************************************//**
34
 
Creates a 64-bit integer out of two 32-bit integers.
 
50
Creates a 64-bit dulint out of two ulints.
35
51
@return created dulint */
36
52
UNIV_INLINE
37
 
ib_uint64_t
38
 
ut_ull_create(
39
 
/*==========*/
 
53
dulint
 
54
ut_dulint_create(
 
55
/*=============*/
40
56
        ulint   high,   /*!< in: high-order 32 bits */
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.
 
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.
46
169
@return rounded value */
47
170
UNIV_INLINE
48
171
ib_uint64_t
61
184
        ib_uint64_t      n,             /*!< in: number to be rounded */
62
185
        ulint            align_no);     /*!< in: align by this number
63
186
                                        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
 
64
215
/*********************************************************//**
65
216
The following function rounds up a pointer to the nearest aligned address.
66
217
@return aligned pointer */