mach0data.h
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:12k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /**********************************************************************
  2. Utilities for converting data from the database file
  3. to the machine format. 
  4. (c) 1995 Innobase Oy
  5. Created 11/28/1995 Heikki Tuuri
  6. ***********************************************************************/
  7. #ifndef mach0data_h
  8. #define mach0data_h
  9. #include "univ.i"
  10. #include "ut0byte.h"
  11. /* The data and all fields are always stored in a database file
  12. in the same format: ascii, big-endian, ... .
  13. All data in the files MUST be accessed using the functions in this
  14. module. */
  15. /***********************************************************
  16. The following function is used to store data in one byte. */
  17. UNIV_INLINE
  18. void 
  19. mach_write_to_1(
  20. /*============*/
  21. byte*   b,      /* in: pointer to byte where to store */
  22. ulint   n);      /* in: ulint integer to be stored, >= 0, < 256 */ 
  23. /************************************************************
  24. The following function is used to fetch data from one byte. */
  25. UNIV_INLINE
  26. ulint 
  27. mach_read_from_1(
  28. /*=============*/
  29. /* out: ulint integer, >= 0, < 256 */
  30. byte*   b);      /* in: pointer to byte */
  31. /***********************************************************
  32. The following function is used to store data in two consecutive
  33. bytes. We store the most significant byte to the lower address. */
  34. UNIV_INLINE
  35. void 
  36. mach_write_to_2(
  37. /*============*/
  38. byte*   b,      /* in: pointer to two bytes where to store */
  39. ulint   n);      /* in: ulint integer to be stored, >= 0, < 64k */ 
  40. /************************************************************
  41. The following function is used to fetch data from two consecutive
  42. bytes. The most significant byte is at the lowest address. */
  43. UNIV_INLINE
  44. ulint 
  45. mach_read_from_2(
  46. /*=============*/
  47. /* out: ulint integer, >= 0, < 64k */
  48. byte*   b);      /* in: pointer to two bytes */
  49. /***********************************************************
  50. The following function is used to store data in 3 consecutive
  51. bytes. We store the most significant byte to the lowest address. */
  52. UNIV_INLINE
  53. void 
  54. mach_write_to_3(
  55. /*============*/
  56. byte*   b,      /* in: pointer to 3 bytes where to store */
  57. ulint n);      /* in: ulint integer to be stored */ 
  58. /************************************************************
  59. The following function is used to fetch data from 3 consecutive
  60. bytes. The most significant byte is at the lowest address. */
  61. UNIV_INLINE
  62. ulint 
  63. mach_read_from_3(
  64. /*=============*/
  65. /* out: ulint integer */
  66. byte*   b);      /* in: pointer to 3 bytes */
  67. /***********************************************************
  68. The following function is used to store data in four consecutive
  69. bytes. We store the most significant byte to the lowest address. */
  70. UNIV_INLINE
  71. void 
  72. mach_write_to_4(
  73. /*============*/
  74. byte*   b,      /* in: pointer to four bytes where to store */
  75. ulint n);      /* in: ulint integer to be stored */ 
  76. /************************************************************
  77. The following function is used to fetch data from 4 consecutive
  78. bytes. The most significant byte is at the lowest address. */
  79. UNIV_INLINE
  80. ulint 
  81. mach_read_from_4(
  82. /*=============*/
  83. /* out: ulint integer */
  84. byte*   b);      /* in: pointer to four bytes */
  85. /***********************************************************
  86. The following function is used to store data from a ulint to memory
  87. in standard order:
  88. we store the most significant byte to the lowest address. */
  89. UNIV_INLINE
  90. void 
  91. mach_write(
  92. /*=======*/
  93. byte*   b,     /* in: pointer to sizeof(ulint) bytes where to store */
  94. ulint   n);      /* in: ulint integer to be stored */ 
  95. /************************************************************
  96. The following function is used to fetch data from memory to a ulint.
  97. The most significant byte is at the lowest address. */
  98. UNIV_INLINE
  99. ulint 
  100. mach_read(
  101. /*======*/
  102. /* out: ulint integer */
  103. byte*   b);      /* in: pointer to sizeof(ulint) bytes */
  104. /*************************************************************
  105. Writes a ulint in a compressed form. */
  106. UNIV_INLINE
  107. ulint
  108. mach_write_compressed(
  109. /*==================*/
  110. /* out: stored size in bytes */
  111. byte*   b,      /* in: pointer to memory where to store */
  112. ulint   n);     /* in: ulint integer to be stored */ 
  113. /*************************************************************
  114. Returns the size of an ulint when written in the compressed form. */
  115. UNIV_INLINE
  116. ulint
  117. mach_get_compressed_size(
  118. /*=====================*/
  119. /* out: compressed size in bytes */
  120. ulint   n);     /* in: ulint integer to be stored */ 
  121. /*************************************************************
  122. Reads a ulint in a compressed form. */
  123. UNIV_INLINE
  124. ulint
  125. mach_read_compressed(
  126. /*=================*/
  127. /* out: read integer */
  128. byte*   b);     /* in: pointer to memory from where to read */
  129. /***********************************************************
  130. The following function is used to store data in 6 consecutive
  131. bytes. We store the most significant byte to the lowest address. */
  132. UNIV_INLINE
  133. void 
  134. mach_write_to_6(
  135. /*============*/
  136. byte*   b,      /* in: pointer to 6 bytes where to store */
  137. dulint n);      /* in: dulint integer to be stored */ 
  138. /************************************************************
  139. The following function is used to fetch data from 6 consecutive
  140. bytes. The most significant byte is at the lowest address. */
  141. UNIV_INLINE
  142. dulint 
  143. mach_read_from_6(
  144. /*=============*/
  145. /* out: dulint integer */
  146. byte*   b);      /* in: pointer to 6 bytes */
  147. /***********************************************************
  148. The following function is used to store data in 7 consecutive
  149. bytes. We store the most significant byte to the lowest address. */
  150. UNIV_INLINE
  151. void 
  152. mach_write_to_7(
  153. /*============*/
  154. byte*   b,      /* in: pointer to 7 bytes where to store */
  155. dulint n);      /* in: dulint integer to be stored */ 
  156. /************************************************************
  157. The following function is used to fetch data from 7 consecutive
  158. bytes. The most significant byte is at the lowest address. */
  159. UNIV_INLINE
  160. dulint 
  161. mach_read_from_7(
  162. /*=============*/
  163. /* out: dulint integer */
  164. byte*   b);      /* in: pointer to 7 bytes */
  165. /***********************************************************
  166. The following function is used to store data in 8 consecutive
  167. bytes. We store the most significant byte to the lowest address. */
  168. UNIV_INLINE
  169. void 
  170. mach_write_to_8(
  171. /*============*/
  172. byte*   b,      /* in: pointer to 8 bytes where to store */
  173. dulint n);     /* in: dulint integer to be stored */ 
  174. /************************************************************
  175. The following function is used to fetch data from 8 consecutive
  176. bytes. The most significant byte is at the lowest address. */
  177. UNIV_INLINE
  178. dulint 
  179. mach_read_from_8(
  180. /*=============*/
  181. /* out: dulint integer */
  182. byte*   b);      /* in: pointer to 8 bytes */
  183. /*************************************************************
  184. Writes a dulint in a compressed form. */
  185. UNIV_INLINE
  186. ulint
  187. mach_dulint_write_compressed(
  188. /*=========================*/
  189. /* out: size in bytes */
  190. byte*   b,      /* in: pointer to memory where to store */
  191. dulint  n);     /* in: dulint integer to be stored */ 
  192. /*************************************************************
  193. Returns the size of a dulint when written in the compressed form. */
  194. UNIV_INLINE
  195. ulint
  196. mach_dulint_get_compressed_size(
  197. /*============================*/
  198. /* out: compressed size in bytes */
  199. dulint   n);    /* in: dulint integer to be stored */ 
  200. /*************************************************************
  201. Reads a dulint in a compressed form. */
  202. UNIV_INLINE
  203. dulint
  204. mach_dulint_read_compressed(
  205. /*========================*/
  206. /* out: read dulint */
  207. byte*   b);     /* in: pointer to memory from where to read */
  208. /*************************************************************
  209. Writes a dulint in a compressed form. */
  210. UNIV_INLINE
  211. ulint
  212. mach_dulint_write_much_compressed(
  213. /*==============================*/
  214. /* out: size in bytes */
  215. byte*   b,      /* in: pointer to memory where to store */
  216. dulint  n);     /* in: dulint integer to be stored */ 
  217. /*************************************************************
  218. Returns the size of a dulint when written in the compressed form. */
  219. UNIV_INLINE
  220. ulint
  221. mach_dulint_get_much_compressed_size(
  222. /*=================================*/
  223. /* out: compressed size in bytes */
  224. dulint   n);     /* in: dulint integer to be stored */ 
  225. /*************************************************************
  226. Reads a dulint in a compressed form. */
  227. UNIV_INLINE
  228. dulint
  229. mach_dulint_read_much_compressed(
  230. /*=============================*/
  231. /* out: read dulint */
  232. byte*   b);      /* in: pointer to memory from where to read */
  233. /*************************************************************
  234. Reads a ulint in a compressed form if the log record fully contains it. */
  235. byte*
  236. mach_parse_compressed(
  237. /*==================*/
  238. /* out: pointer to end of the stored field, NULL if
  239. not complete */
  240. byte*   ptr,    /* in: pointer to buffer from where to read */
  241. byte* end_ptr,/* in: pointer to end of the buffer */
  242. ulint* val); /* out: read value */ 
  243. /*************************************************************
  244. Reads a dulint in a compressed form if the log record fully contains it. */
  245. byte*
  246. mach_dulint_parse_compressed(
  247. /*=========================*/
  248. /* out: pointer to end of the stored field, NULL if
  249. not complete */
  250. byte*   ptr,    /* in: pointer to buffer from where to read */
  251. byte* end_ptr,/* in: pointer to end of the buffer */
  252. dulint* val); /* out: read value */ 
  253. /*************************************************************
  254. Reads a double. It is stored in a little-endian format. */
  255. UNIV_INLINE
  256. double
  257. mach_double_read(
  258. /*=============*/
  259. /* out: double read */
  260. byte*   b);      /* in: pointer to memory from where to read */
  261. /*************************************************************
  262. Writes a double. It is stored in a little-endian format. */
  263. UNIV_INLINE
  264. void
  265. mach_double_write(
  266. /*==============*/
  267. byte*   b,      /* in: pointer to memory where to write */
  268. double  d); /* in: double */
  269. /*************************************************************
  270. Reads a float. It is stored in a little-endian format. */
  271. UNIV_INLINE
  272. float
  273. mach_float_read(
  274. /*=============*/
  275. /* out: float read */
  276. byte*   b);      /* in: pointer to memory from where to read */
  277. /*************************************************************
  278. Writes a float. It is stored in a little-endian format. */
  279. UNIV_INLINE
  280. void
  281. mach_float_write(
  282. /*==============*/
  283. byte*   b,      /* in: pointer to memory where to write */
  284. float  d); /* in: float */
  285. /*************************************************************
  286. Reads a ulint stored in the little-endian format. */
  287. UNIV_INLINE
  288. ulint
  289. mach_read_from_n_little_endian(
  290. /*===========================*/
  291. /* out: unsigned long int */
  292. byte* buf, /* in: from where to read */
  293. ulint buf_size); /* in: from how many bytes to read */
  294. /*************************************************************
  295. Writes a ulint in the little-endian format. */
  296. UNIV_INLINE
  297. void
  298. mach_write_to_n_little_endian(
  299. /*==========================*/
  300. byte* dest, /* in: where to write */
  301. ulint dest_size, /* in: into how many bytes to write */
  302. ulint n); /* in: unsigned long int to write */
  303. /*************************************************************
  304. Reads a ulint stored in the little-endian format. */
  305. UNIV_INLINE
  306. ulint
  307. mach_read_from_2_little_endian(
  308. /*===========================*/
  309. /* out: unsigned long int */
  310. byte* buf); /* in: from where to read */
  311. /*************************************************************
  312. Writes a ulint in the little-endian format. */
  313. UNIV_INLINE
  314. void
  315. mach_write_to_2_little_endian(
  316. /*==========================*/
  317. byte* dest, /* in: where to write */
  318. ulint n); /* in: unsigned long int to write */
  319. #ifndef UNIV_NONINL
  320. #include "mach0data.ic"
  321. #endif
  322. #endif