myisampack.h
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:14k
源码类别:

MySQL数据库

开发平台:

Visual C++

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