~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/myisam/myisampack.h

  • Committer: Padraig O'Sullivan
  • Date: 2009-09-13 01:03:01 UTC
  • mto: (1126.9.2 captain-20090915-01)
  • mto: This revision was merged to the branch mainline in revision 1133.
  • Revision ID: osullivan.padraig@gmail.com-20090913010301-tcvvezipx1124acy
Added calls to the dtrace delete begin/end probes.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* Copyright (C) 2000 MySQL AB
2
 
 
3
 
   This program is free software; you can redistribute it and/or modify
4
 
   it under the terms of the GNU General Public License as published by
5
 
   the Free Software Foundation; version 2 of the License.
6
 
 
7
 
   This program is distributed in the hope that it will be useful,
8
 
   but WITHOUT ANY WARRANTY; without even the implied warranty of
9
 
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
 
   GNU General Public License for more details.
11
 
 
12
 
   You should have received a copy of the GNU General Public License
13
 
   along with this program; if not, write to the Free Software
14
 
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
15
 
 
16
 
#ifndef PLUGIN_MYISAM_MYISAMPACK_H
17
 
#define PLUGIN_MYISAM_MYISAMPACK_H
18
 
 
19
 
/*
20
 
  Storing of values in high byte first order.
21
 
 
22
 
  integer keys and file pointers are stored with high byte first to get
23
 
  better compression
24
 
*/
25
 
 
26
 
/* these two are for uniformity */
27
 
#define mi_sint1korr(A) ((int8_t)(*A))
28
 
 
29
 
#define mi_sint2korr(A) ((int16_t) (((int16_t) (((const unsigned char*) (A))[1])) +\
30
 
                                  ((int16_t) ((int16_t) ((const char*) (A))[0]) << 8)))
31
 
#define mi_sint3korr(A) ((int32_t) (((((const unsigned char*) (A))[0]) & 128) ? \
32
 
                                  (((uint32_t) 255L << 24) | \
33
 
                                   (((uint32_t) ((const unsigned char*) (A))[0]) << 16) |\
34
 
                                   (((uint32_t) ((const unsigned char*) (A))[1]) << 8) | \
35
 
                                   ((uint32_t) ((const unsigned char*) (A))[2])) : \
36
 
                                  (((uint32_t) ((const unsigned char*) (A))[0]) << 16) |\
37
 
                                  (((uint32_t) ((const unsigned char*) (A))[1]) << 8) | \
38
 
                                  ((uint32_t) ((const unsigned char*) (A))[2])))
39
 
#define mi_sint4korr(A) ((int32_t) (((int32_t) (((const unsigned char*) (A))[3])) +\
40
 
                                  ((int32_t) (((const unsigned char*) (A))[2]) << 8) +\
41
 
                                  ((int32_t) (((const unsigned char*) (A))[1]) << 16) +\
42
 
                                  ((int32_t) ((int16_t) ((const char*) (A))[0]) << 24)))
43
 
#define mi_sint8korr(A) ((int64_t) mi_uint8korr(A))
44
 
#define mi_uint2korr(A) ((uint16_t) (((uint16_t) (((const unsigned char*) (A))[1])) +\
45
 
                                   ((uint16_t) (((const unsigned char*) (A))[0]) << 8)))
46
 
#define mi_uint3korr(A) ((uint32_t) (((uint32_t) (((const unsigned char*) (A))[2])) +\
47
 
                                   (((uint32_t) (((const unsigned char*) (A))[1])) << 8) +\
48
 
                                   (((uint32_t) (((const unsigned char*) (A))[0])) << 16)))
49
 
#define mi_uint4korr(A) ((uint32_t) (((uint32_t) (((const unsigned char*) (A))[3])) +\
50
 
                                   (((uint32_t) (((const unsigned char*) (A))[2])) << 8) +\
51
 
                                   (((uint32_t) (((const unsigned char*) (A))[1])) << 16) +\
52
 
                                   (((uint32_t) (((const unsigned char*) (A))[0])) << 24)))
53
 
#define mi_uint5korr(A) ((uint64_t)(((uint32_t) (((const unsigned char*) (A))[4])) +\
54
 
                                    (((uint32_t) (((const unsigned char*) (A))[3])) << 8) +\
55
 
                                    (((uint32_t) (((const unsigned char*) (A))[2])) << 16) +\
56
 
                                    (((uint32_t) (((const unsigned char*) (A))[1])) << 24)) +\
57
 
                                    (((uint64_t) (((const unsigned char*) (A))[0])) << 32))
58
 
#define mi_uint6korr(A) ((uint64_t)(((uint32_t) (((const unsigned char*) (A))[5])) +\
59
 
                                    (((uint32_t) (((const unsigned char*) (A))[4])) << 8) +\
60
 
                                    (((uint32_t) (((const unsigned char*) (A))[3])) << 16) +\
61
 
                                    (((uint32_t) (((const unsigned char*) (A))[2])) << 24)) +\
62
 
                        (((uint64_t) (((uint32_t) (((const unsigned char*) (A))[1])) +\
63
 
                                    (((uint32_t) (((const unsigned char*) (A))[0]) << 8)))) <<\
64
 
                                     32))
65
 
#define mi_uint7korr(A) ((uint64_t)(((uint32_t) (((const unsigned char*) (A))[6])) +\
66
 
                                    (((uint32_t) (((const unsigned char*) (A))[5])) << 8) +\
67
 
                                    (((uint32_t) (((const unsigned char*) (A))[4])) << 16) +\
68
 
                                    (((uint32_t) (((const unsigned char*) (A))[3])) << 24)) +\
69
 
                        (((uint64_t) (((uint32_t) (((const unsigned char*) (A))[2])) +\
70
 
                                    (((uint32_t) (((const unsigned char*) (A))[1])) << 8) +\
71
 
                                    (((uint32_t) (((const unsigned char*) (A))[0])) << 16))) <<\
72
 
                                     32))
73
 
#define mi_uint8korr(A) ((uint64_t)(((uint32_t) (((const unsigned char*) (A))[7])) +\
74
 
                                    (((uint32_t) (((const unsigned char*) (A))[6])) << 8) +\
75
 
                                    (((uint32_t) (((const unsigned char*) (A))[5])) << 16) +\
76
 
                                    (((uint32_t) (((const unsigned char*) (A))[4])) << 24)) +\
77
 
                        (((uint64_t) (((uint32_t) (((const unsigned char*) (A))[3])) +\
78
 
                                    (((uint32_t) (((const unsigned char*) (A))[2])) << 8) +\
79
 
                                    (((uint32_t) (((const unsigned char*) (A))[1])) << 16) +\
80
 
                                    (((uint32_t) (((const unsigned char*) (A))[0])) << 24))) <<\
81
 
                                    32))
82
 
 
83
 
/* This one is for uniformity */
84
 
#define mi_int1store(T,A) *((unsigned char*)(T))= (unsigned char) (A)
85
 
 
86
 
#define mi_int2store(T,A)   { uint32_t def_temp= (uint32_t) (A) ;\
87
 
                              ((unsigned char*) (T))[1]= (unsigned char) (def_temp);\
88
 
                              ((unsigned char*) (T))[0]= (unsigned char) (def_temp >> 8); }
89
 
#define mi_int3store(T,A)   { /*lint -save -e734 */\
90
 
                              uint32_t def_temp= (uint32_t) (A);\
91
 
                              ((unsigned char*) (T))[2]= (unsigned char) (def_temp);\
92
 
                              ((unsigned char*) (T))[1]= (unsigned char) (def_temp >> 8);\
93
 
                              ((unsigned char*) (T))[0]= (unsigned char) (def_temp >> 16);\
94
 
                              /*lint -restore */}
95
 
#define mi_int4store(T,A)   { uint32_t def_temp= (uint32_t) (A);\
96
 
                              ((unsigned char*) (T))[3]= (unsigned char) (def_temp);\
97
 
                              ((unsigned char*) (T))[2]= (unsigned char) (def_temp >> 8);\
98
 
                              ((unsigned char*) (T))[1]= (unsigned char) (def_temp >> 16);\
99
 
                              ((unsigned char*) (T))[0]= (unsigned char) (def_temp >> 24); }
100
 
#define mi_int5store(T,A)   { uint32_t def_temp= (uint32_t) (A),\
101
 
                              def_temp2= (uint32_t) ((A) >> 32);\
102
 
                              ((unsigned char*) (T))[4]= (unsigned char) (def_temp);\
103
 
                              ((unsigned char*) (T))[3]= (unsigned char) (def_temp >> 8);\
104
 
                              ((unsigned char*) (T))[2]= (unsigned char) (def_temp >> 16);\
105
 
                              ((unsigned char*) (T))[1]= (unsigned char) (def_temp >> 24);\
106
 
                              ((unsigned char*) (T))[0]= (unsigned char) (def_temp2); }
107
 
#define mi_int6store(T,A)   { uint32_t def_temp= (uint32_t) (A),\
108
 
                              def_temp2= (uint32_t) ((A) >> 32);\
109
 
                              ((unsigned char*) (T))[5]= (unsigned char) (def_temp);\
110
 
                              ((unsigned char*) (T))[4]= (unsigned char) (def_temp >> 8);\
111
 
                              ((unsigned char*) (T))[3]= (unsigned char) (def_temp >> 16);\
112
 
                              ((unsigned char*) (T))[2]= (unsigned char) (def_temp >> 24);\
113
 
                              ((unsigned char*) (T))[1]= (unsigned char) (def_temp2);\
114
 
                              ((unsigned char*) (T))[0]= (unsigned char) (def_temp2 >> 8); }
115
 
#define mi_int7store(T,A)   { uint32_t def_temp= (uint32_t) (A),\
116
 
                              def_temp2= (uint32_t) ((A) >> 32);\
117
 
                              ((unsigned char*) (T))[6]= (unsigned char) (def_temp);\
118
 
                              ((unsigned char*) (T))[5]= (unsigned char) (def_temp >> 8);\
119
 
                              ((unsigned char*) (T))[4]= (unsigned char) (def_temp >> 16);\
120
 
                              ((unsigned char*) (T))[3]= (unsigned char) (def_temp >> 24);\
121
 
                              ((unsigned char*) (T))[2]= (unsigned char) (def_temp2);\
122
 
                              ((unsigned char*) (T))[1]= (unsigned char) (def_temp2 >> 8);\
123
 
                              ((unsigned char*) (T))[0]= (unsigned char) (def_temp2 >> 16); }
124
 
#define mi_int8store(T,A)   { uint32_t def_temp3= (uint32_t) (A),\
125
 
                              def_temp4= (uint32_t) ((A) >> 32);\
126
 
                              mi_int4store((unsigned char*) (T) + 0, def_temp4);\
127
 
                              mi_int4store((unsigned char*) (T) + 4, def_temp3); }
128
 
 
129
 
#ifdef WORDS_BIGENDIAN
130
 
 
131
 
#define mi_float4get(V,M)   { float def_temp;\
132
 
                              ((unsigned char*) &def_temp)[0]= ((const unsigned char*) (M))[0];\
133
 
                              ((unsigned char*) &def_temp)[1]= ((const unsigned char*) (M))[1];\
134
 
                              ((unsigned char*) &def_temp)[2]= ((const unsigned char*) (M))[2];\
135
 
                              ((unsigned char*) &def_temp)[3]= ((const unsigned char*) (M))[3];\
136
 
                              (V)= def_temp; }
137
 
 
138
 
#define mi_float8get(V,M)   { double def_temp;\
139
 
                              ((unsigned char*) &def_temp)[0]= ((unsigned char*) (M))[0];\
140
 
                              ((unsigned char*) &def_temp)[1]= ((unsigned char*) (M))[1];\
141
 
                              ((unsigned char*) &def_temp)[2]= ((unsigned char*) (M))[2];\
142
 
                              ((unsigned char*) &def_temp)[3]= ((unsigned char*) (M))[3];\
143
 
                              ((unsigned char*) &def_temp)[4]= ((unsigned char*) (M))[4];\
144
 
                              ((unsigned char*) &def_temp)[5]= ((unsigned char*) (M))[5];\
145
 
                              ((unsigned char*) &def_temp)[6]= ((unsigned char*) (M))[6];\
146
 
                              ((unsigned char*) &def_temp)[7]= ((unsigned char*) (M))[7]; \
147
 
                              (V)= def_temp; }
148
 
#else
149
 
 
150
 
#define mi_float4get(V,M)   { float def_temp;\
151
 
                              ((unsigned char*) &def_temp)[0]= ((unsigned char*) (M))[3];\
152
 
                              ((unsigned char*) &def_temp)[1]= ((unsigned char*) (M))[2];\
153
 
                              ((unsigned char*) &def_temp)[2]= ((unsigned char*) (M))[1];\
154
 
                              ((unsigned char*) &def_temp)[3]= ((unsigned char*) (M))[0];\
155
 
                              (V)= def_temp; }
156
 
 
157
 
#if defined(__FLOAT_WORD_ORDER) && (__FLOAT_WORD_ORDER == __BIG_ENDIAN)
158
 
 
159
 
#define mi_float8get(V,M)   { double def_temp;\
160
 
                              ((unsigned char*) &def_temp)[0]= ((unsigned char*) (M))[3];\
161
 
                              ((unsigned char*) &def_temp)[1]= ((unsigned char*) (M))[2];\
162
 
                              ((unsigned char*) &def_temp)[2]= ((unsigned char*) (M))[1];\
163
 
                              ((unsigned char*) &def_temp)[3]= ((unsigned char*) (M))[0];\
164
 
                              ((unsigned char*) &def_temp)[4]= ((unsigned char*) (M))[7];\
165
 
                              ((unsigned char*) &def_temp)[5]= ((unsigned char*) (M))[6];\
166
 
                              ((unsigned char*) &def_temp)[6]= ((unsigned char*) (M))[5];\
167
 
                              ((unsigned char*) &def_temp)[7]= ((unsigned char*) (M))[4];\
168
 
                              (V)= def_temp; }
169
 
 
170
 
#else
171
 
 
172
 
#define mi_float8get(V,M)   { double def_temp;\
173
 
                              ((unsigned char*) &def_temp)[0]= ((unsigned char*) (M))[7];\
174
 
                              ((unsigned char*) &def_temp)[1]= ((unsigned char*) (M))[6];\
175
 
                              ((unsigned char*) &def_temp)[2]= ((unsigned char*) (M))[5];\
176
 
                              ((unsigned char*) &def_temp)[3]= ((unsigned char*) (M))[4];\
177
 
                              ((unsigned char*) &def_temp)[4]= ((unsigned char*) (M))[3];\
178
 
                              ((unsigned char*) &def_temp)[5]= ((unsigned char*) (M))[2];\
179
 
                              ((unsigned char*) &def_temp)[6]= ((unsigned char*) (M))[1];\
180
 
                              ((unsigned char*) &def_temp)[7]= ((unsigned char*) (M))[0];\
181
 
                              (V)= def_temp; }
182
 
#endif /* __FLOAT_WORD_ORDER */
183
 
#endif /* WORDS_BIGENDIAN */
184
 
 
185
 
/* Fix to avoid warnings when sizeof(ha_rows) == sizeof(long) */
186
 
#define mi_rowstore(T,A)    mi_int8store(T, A)
187
 
#define mi_rowkorr(T)       mi_uint8korr(T)
188
 
 
189
 
#define mi_sizestore(T,A)   mi_int8store(T, A)
190
 
#define mi_sizekorr(T)      mi_uint8korr(T)
191
 
 
192
 
#endif /* PLUGIN_MYISAM_MYISAMPACK_H */