~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
2234 by Brian Aker
Mass removal of ifdef/endif in favor of pragma once.
16
#pragma once
575.1.6 by Monty Taylor
Cleaned up some headers for PCH.
17
1 by brian
clean slate
18
/*
19
  Storing of values in high byte first order.
20
21
  integer keys and file pointers are stored with high byte first to get
22
  better compression
23
*/
24
25
/* these two are for uniformity */
206 by Brian Aker
Removed final uint dead types.
26
#define mi_sint1korr(A) ((int8_t)(*A))
1 by brian
clean slate
27
313 by Brian Aker
Further work with ulong in myisam
28
#define mi_sint2korr(A) ((int16_t) (((int16_t) (((const unsigned char*) (A))[1])) +\
266.7.10 by Andy Lester
make things more const-correct
29
                                  ((int16_t) ((int16_t) ((const char*) (A))[0]) << 8)))
313 by Brian Aker
Further work with ulong in myisam
30
#define mi_sint3korr(A) ((int32_t) (((((const unsigned char*) (A))[0]) & 128) ? \
205 by Brian Aker
uint32 -> uin32_t
31
                                  (((uint32_t) 255L << 24) | \
313 by Brian Aker
Further work with ulong in myisam
32
                                   (((uint32_t) ((const unsigned char*) (A))[0]) << 16) |\
33
                                   (((uint32_t) ((const unsigned char*) (A))[1]) << 8) | \
34
                                   ((uint32_t) ((const unsigned char*) (A))[2])) : \
35
                                  (((uint32_t) ((const unsigned char*) (A))[0]) << 16) |\
36
                                  (((uint32_t) ((const unsigned char*) (A))[1]) << 8) | \
37
                                  ((uint32_t) ((const unsigned char*) (A))[2])))
38
#define mi_sint4korr(A) ((int32_t) (((int32_t) (((const unsigned char*) (A))[3])) +\
39
                                  ((int32_t) (((const unsigned char*) (A))[2]) << 8) +\
40
                                  ((int32_t) (((const unsigned char*) (A))[1]) << 16) +\
266.7.10 by Andy Lester
make things more const-correct
41
                                  ((int32_t) ((int16_t) ((const char*) (A))[0]) << 24)))
152 by Brian Aker
longlong replacement
42
#define mi_sint8korr(A) ((int64_t) mi_uint8korr(A))
313 by Brian Aker
Further work with ulong in myisam
43
#define mi_uint2korr(A) ((uint16_t) (((uint16_t) (((const unsigned char*) (A))[1])) +\
44
                                   ((uint16_t) (((const unsigned char*) (A))[0]) << 8)))
45
#define mi_uint3korr(A) ((uint32_t) (((uint32_t) (((const unsigned char*) (A))[2])) +\
46
                                   (((uint32_t) (((const unsigned char*) (A))[1])) << 8) +\
47
                                   (((uint32_t) (((const unsigned char*) (A))[0])) << 16)))
48
#define mi_uint4korr(A) ((uint32_t) (((uint32_t) (((const unsigned char*) (A))[3])) +\
49
                                   (((uint32_t) (((const unsigned char*) (A))[2])) << 8) +\
50
                                   (((uint32_t) (((const unsigned char*) (A))[1])) << 16) +\
51
                                   (((uint32_t) (((const unsigned char*) (A))[0])) << 24)))
52
#define mi_uint5korr(A) ((uint64_t)(((uint32_t) (((const unsigned char*) (A))[4])) +\
53
                                    (((uint32_t) (((const unsigned char*) (A))[3])) << 8) +\
54
                                    (((uint32_t) (((const unsigned char*) (A))[2])) << 16) +\
55
                                    (((uint32_t) (((const unsigned char*) (A))[1])) << 24)) +\
56
                                    (((uint64_t) (((const unsigned char*) (A))[0])) << 32))
57
#define mi_uint6korr(A) ((uint64_t)(((uint32_t) (((const unsigned char*) (A))[5])) +\
58
                                    (((uint32_t) (((const unsigned char*) (A))[4])) << 8) +\
59
                                    (((uint32_t) (((const unsigned char*) (A))[3])) << 16) +\
60
                                    (((uint32_t) (((const unsigned char*) (A))[2])) << 24)) +\
61
                        (((uint64_t) (((uint32_t) (((const unsigned char*) (A))[1])) +\
62
                                    (((uint32_t) (((const unsigned char*) (A))[0]) << 8)))) <<\
63
                                     32))
64
#define mi_uint7korr(A) ((uint64_t)(((uint32_t) (((const unsigned char*) (A))[6])) +\
65
                                    (((uint32_t) (((const unsigned char*) (A))[5])) << 8) +\
66
                                    (((uint32_t) (((const unsigned char*) (A))[4])) << 16) +\
67
                                    (((uint32_t) (((const unsigned char*) (A))[3])) << 24)) +\
68
                        (((uint64_t) (((uint32_t) (((const unsigned char*) (A))[2])) +\
69
                                    (((uint32_t) (((const unsigned char*) (A))[1])) << 8) +\
70
                                    (((uint32_t) (((const unsigned char*) (A))[0])) << 16))) <<\
71
                                     32))
72
#define mi_uint8korr(A) ((uint64_t)(((uint32_t) (((const unsigned char*) (A))[7])) +\
73
                                    (((uint32_t) (((const unsigned char*) (A))[6])) << 8) +\
74
                                    (((uint32_t) (((const unsigned char*) (A))[5])) << 16) +\
75
                                    (((uint32_t) (((const unsigned char*) (A))[4])) << 24)) +\
76
                        (((uint64_t) (((uint32_t) (((const unsigned char*) (A))[3])) +\
77
                                    (((uint32_t) (((const unsigned char*) (A))[2])) << 8) +\
78
                                    (((uint32_t) (((const unsigned char*) (A))[1])) << 16) +\
79
                                    (((uint32_t) (((const unsigned char*) (A))[0])) << 24))) <<\
1 by brian
clean slate
80
                                    32))
81
82
/* This one is for uniformity */
313 by Brian Aker
Further work with ulong in myisam
83
#define mi_int1store(T,A) *((unsigned char*)(T))= (unsigned char) (A)
1 by brian
clean slate
84
313 by Brian Aker
Further work with ulong in myisam
85
#define mi_int2store(T,A)   { uint32_t def_temp= (uint32_t) (A) ;\
86
                              ((unsigned char*) (T))[1]= (unsigned char) (def_temp);\
87
                              ((unsigned char*) (T))[0]= (unsigned char) (def_temp >> 8); }
1 by brian
clean slate
88
#define mi_int3store(T,A)   { /*lint -save -e734 */\
313 by Brian Aker
Further work with ulong in myisam
89
                              uint32_t def_temp= (uint32_t) (A);\
90
                              ((unsigned char*) (T))[2]= (unsigned char) (def_temp);\
91
                              ((unsigned char*) (T))[1]= (unsigned char) (def_temp >> 8);\
92
                              ((unsigned char*) (T))[0]= (unsigned char) (def_temp >> 16);\
1 by brian
clean slate
93
                              /*lint -restore */}
313 by Brian Aker
Further work with ulong in myisam
94
#define mi_int4store(T,A)   { uint32_t def_temp= (uint32_t) (A);\
95
                              ((unsigned char*) (T))[3]= (unsigned char) (def_temp);\
96
                              ((unsigned char*) (T))[2]= (unsigned char) (def_temp >> 8);\
97
                              ((unsigned char*) (T))[1]= (unsigned char) (def_temp >> 16);\
98
                              ((unsigned char*) (T))[0]= (unsigned char) (def_temp >> 24); }
99
#define mi_int5store(T,A)   { uint32_t def_temp= (uint32_t) (A),\
100
                              def_temp2= (uint32_t) ((A) >> 32);\
101
                              ((unsigned char*) (T))[4]= (unsigned char) (def_temp);\
102
                              ((unsigned char*) (T))[3]= (unsigned char) (def_temp >> 8);\
103
                              ((unsigned char*) (T))[2]= (unsigned char) (def_temp >> 16);\
104
                              ((unsigned char*) (T))[1]= (unsigned char) (def_temp >> 24);\
105
                              ((unsigned char*) (T))[0]= (unsigned char) (def_temp2); }
106
#define mi_int6store(T,A)   { uint32_t def_temp= (uint32_t) (A),\
107
                              def_temp2= (uint32_t) ((A) >> 32);\
108
                              ((unsigned char*) (T))[5]= (unsigned char) (def_temp);\
109
                              ((unsigned char*) (T))[4]= (unsigned char) (def_temp >> 8);\
110
                              ((unsigned char*) (T))[3]= (unsigned char) (def_temp >> 16);\
111
                              ((unsigned char*) (T))[2]= (unsigned char) (def_temp >> 24);\
112
                              ((unsigned char*) (T))[1]= (unsigned char) (def_temp2);\
113
                              ((unsigned char*) (T))[0]= (unsigned char) (def_temp2 >> 8); }
114
#define mi_int7store(T,A)   { uint32_t def_temp= (uint32_t) (A),\
115
                              def_temp2= (uint32_t) ((A) >> 32);\
116
                              ((unsigned char*) (T))[6]= (unsigned char) (def_temp);\
117
                              ((unsigned char*) (T))[5]= (unsigned char) (def_temp >> 8);\
118
                              ((unsigned char*) (T))[4]= (unsigned char) (def_temp >> 16);\
119
                              ((unsigned char*) (T))[3]= (unsigned char) (def_temp >> 24);\
120
                              ((unsigned char*) (T))[2]= (unsigned char) (def_temp2);\
121
                              ((unsigned char*) (T))[1]= (unsigned char) (def_temp2 >> 8);\
122
                              ((unsigned char*) (T))[0]= (unsigned char) (def_temp2 >> 16); }
123
#define mi_int8store(T,A)   { uint32_t def_temp3= (uint32_t) (A),\
124
                              def_temp4= (uint32_t) ((A) >> 32);\
125
                              mi_int4store((unsigned char*) (T) + 0, def_temp4);\
126
                              mi_int4store((unsigned char*) (T) + 4, def_temp3); }
1 by brian
clean slate
127
128
#ifdef WORDS_BIGENDIAN
129
130
#define mi_float4get(V,M)   { float def_temp;\
313 by Brian Aker
Further work with ulong in myisam
131
                              ((unsigned char*) &def_temp)[0]= ((const unsigned char*) (M))[0];\
132
                              ((unsigned char*) &def_temp)[1]= ((const unsigned char*) (M))[1];\
133
                              ((unsigned char*) &def_temp)[2]= ((const unsigned char*) (M))[2];\
134
                              ((unsigned char*) &def_temp)[3]= ((const unsigned char*) (M))[3];\
1 by brian
clean slate
135
                              (V)= def_temp; }
136
137
#define mi_float8get(V,M)   { double def_temp;\
313 by Brian Aker
Further work with ulong in myisam
138
                              ((unsigned char*) &def_temp)[0]= ((unsigned char*) (M))[0];\
139
                              ((unsigned char*) &def_temp)[1]= ((unsigned char*) (M))[1];\
140
                              ((unsigned char*) &def_temp)[2]= ((unsigned char*) (M))[2];\
141
                              ((unsigned char*) &def_temp)[3]= ((unsigned char*) (M))[3];\
142
                              ((unsigned char*) &def_temp)[4]= ((unsigned char*) (M))[4];\
143
                              ((unsigned char*) &def_temp)[5]= ((unsigned char*) (M))[5];\
144
                              ((unsigned char*) &def_temp)[6]= ((unsigned char*) (M))[6];\
145
                              ((unsigned char*) &def_temp)[7]= ((unsigned char*) (M))[7]; \
1 by brian
clean slate
146
                              (V)= def_temp; }
147
#else
148
149
#define mi_float4get(V,M)   { float def_temp;\
313 by Brian Aker
Further work with ulong in myisam
150
                              ((unsigned char*) &def_temp)[0]= ((unsigned char*) (M))[3];\
151
                              ((unsigned char*) &def_temp)[1]= ((unsigned char*) (M))[2];\
152
                              ((unsigned char*) &def_temp)[2]= ((unsigned char*) (M))[1];\
153
                              ((unsigned char*) &def_temp)[3]= ((unsigned char*) (M))[0];\
1 by brian
clean slate
154
                              (V)= def_temp; }
155
156
#if defined(__FLOAT_WORD_ORDER) && (__FLOAT_WORD_ORDER == __BIG_ENDIAN)
157
158
#define mi_float8get(V,M)   { double def_temp;\
313 by Brian Aker
Further work with ulong in myisam
159
                              ((unsigned char*) &def_temp)[0]= ((unsigned char*) (M))[3];\
160
                              ((unsigned char*) &def_temp)[1]= ((unsigned char*) (M))[2];\
161
                              ((unsigned char*) &def_temp)[2]= ((unsigned char*) (M))[1];\
162
                              ((unsigned char*) &def_temp)[3]= ((unsigned char*) (M))[0];\
163
                              ((unsigned char*) &def_temp)[4]= ((unsigned char*) (M))[7];\
164
                              ((unsigned char*) &def_temp)[5]= ((unsigned char*) (M))[6];\
165
                              ((unsigned char*) &def_temp)[6]= ((unsigned char*) (M))[5];\
166
                              ((unsigned char*) &def_temp)[7]= ((unsigned char*) (M))[4];\
1 by brian
clean slate
167
                              (V)= def_temp; }
168
169
#else
170
171
#define mi_float8get(V,M)   { double def_temp;\
313 by Brian Aker
Further work with ulong in myisam
172
                              ((unsigned char*) &def_temp)[0]= ((unsigned char*) (M))[7];\
173
                              ((unsigned char*) &def_temp)[1]= ((unsigned char*) (M))[6];\
174
                              ((unsigned char*) &def_temp)[2]= ((unsigned char*) (M))[5];\
175
                              ((unsigned char*) &def_temp)[3]= ((unsigned char*) (M))[4];\
176
                              ((unsigned char*) &def_temp)[4]= ((unsigned char*) (M))[3];\
177
                              ((unsigned char*) &def_temp)[5]= ((unsigned char*) (M))[2];\
178
                              ((unsigned char*) &def_temp)[6]= ((unsigned char*) (M))[1];\
179
                              ((unsigned char*) &def_temp)[7]= ((unsigned char*) (M))[0];\
1 by brian
clean slate
180
                              (V)= def_temp; }
181
#endif /* __FLOAT_WORD_ORDER */
182
#endif /* WORDS_BIGENDIAN */
183
184
/* Fix to avoid warnings when sizeof(ha_rows) == sizeof(long) */
185
#define mi_rowstore(T,A)    mi_int8store(T, A)
186
#define mi_rowkorr(T)       mi_uint8korr(T)
187
188
#define mi_sizestore(T,A)   mi_int8store(T, A)
189
#define mi_sizekorr(T)      mi_uint8korr(T)
575.1.6 by Monty Taylor
Cleaned up some headers for PCH.
190