~drizzle-trunk/drizzle/development

1 by brian
clean slate
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
1802.10.2 by Monty Taylor
Update all of the copyright headers to include the correct address.
14
   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA */
1 by brian
clean slate
15
1122.2.10 by Monty Taylor
Fixed all of the include guards.
16
#ifndef PLUGIN_MYISAM_MYISAMPACK_H
17
#define PLUGIN_MYISAM_MYISAMPACK_H
575.1.6 by Monty Taylor
Cleaned up some headers for PCH.
18
1 by brian
clean slate
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 */
206 by Brian Aker
Removed final uint dead types.
27
#define mi_sint1korr(A) ((int8_t)(*A))
1 by brian
clean slate
28
313 by Brian Aker
Further work with ulong in myisam
29
#define mi_sint2korr(A) ((int16_t) (((int16_t) (((const unsigned char*) (A))[1])) +\
266.7.10 by Andy Lester
make things more const-correct
30
                                  ((int16_t) ((int16_t) ((const char*) (A))[0]) << 8)))
313 by Brian Aker
Further work with ulong in myisam
31
#define mi_sint3korr(A) ((int32_t) (((((const unsigned char*) (A))[0]) & 128) ? \
205 by Brian Aker
uint32 -> uin32_t
32
                                  (((uint32_t) 255L << 24) | \
313 by Brian Aker
Further work with ulong in myisam
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) +\
266.7.10 by Andy Lester
make things more const-correct
42
                                  ((int32_t) ((int16_t) ((const char*) (A))[0]) << 24)))
152 by Brian Aker
longlong replacement
43
#define mi_sint8korr(A) ((int64_t) mi_uint8korr(A))
313 by Brian Aker
Further work with ulong in myisam
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))) <<\
1 by brian
clean slate
81
                                    32))
82
83
/* This one is for uniformity */
313 by Brian Aker
Further work with ulong in myisam
84
#define mi_int1store(T,A) *((unsigned char*)(T))= (unsigned char) (A)
1 by brian
clean slate
85
313 by Brian Aker
Further work with ulong in myisam
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); }
1 by brian
clean slate
89
#define mi_int3store(T,A)   { /*lint -save -e734 */\
313 by Brian Aker
Further work with ulong in myisam
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);\
1 by brian
clean slate
94
                              /*lint -restore */}
313 by Brian Aker
Further work with ulong in myisam
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); }
1 by brian
clean slate
128
129
#ifdef WORDS_BIGENDIAN
130
131
#define mi_float4get(V,M)   { float def_temp;\
313 by Brian Aker
Further work with ulong in myisam
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];\
1 by brian
clean slate
136
                              (V)= def_temp; }
137
138
#define mi_float8get(V,M)   { double def_temp;\
313 by Brian Aker
Further work with ulong in myisam
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]; \
1 by brian
clean slate
147
                              (V)= def_temp; }
148
#else
149
150
#define mi_float4get(V,M)   { float def_temp;\
313 by Brian Aker
Further work with ulong in myisam
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];\
1 by brian
clean slate
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;\
313 by Brian Aker
Further work with ulong in myisam
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];\
1 by brian
clean slate
168
                              (V)= def_temp; }
169
170
#else
171
172
#define mi_float8get(V,M)   { double def_temp;\
313 by Brian Aker
Further work with ulong in myisam
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];\
1 by brian
clean slate
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)
575.1.6 by Monty Taylor
Cleaned up some headers for PCH.
191
1122.2.10 by Monty Taylor
Fixed all of the include guards.
192
#endif /* PLUGIN_MYISAM_MYISAMPACK_H */