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

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. Writes a ulint in a compressed form (1..5 bytes). */
  87. UNIV_INLINE
  88. ulint
  89. mach_write_compressed(
  90. /*==================*/
  91. /* out: stored size in bytes */
  92. byte*   b,      /* in: pointer to memory where to store */
  93. ulint   n);     /* in: ulint integer to be stored */ 
  94. /*************************************************************
  95. Returns the size of an ulint when written in the compressed form. */
  96. UNIV_INLINE
  97. ulint
  98. mach_get_compressed_size(
  99. /*=====================*/
  100. /* out: compressed size in bytes */
  101. ulint   n);     /* in: ulint integer to be stored */ 
  102. /*************************************************************
  103. Reads a ulint in a compressed form. */
  104. UNIV_INLINE
  105. ulint
  106. mach_read_compressed(
  107. /*=================*/
  108. /* out: read integer */
  109. byte*   b);     /* in: pointer to memory from where to read */
  110. /***********************************************************
  111. The following function is used to store data in 6 consecutive
  112. bytes. We store the most significant byte to the lowest address. */
  113. UNIV_INLINE
  114. void 
  115. mach_write_to_6(
  116. /*============*/
  117. byte*   b,      /* in: pointer to 6 bytes where to store */
  118. dulint n);      /* in: dulint integer to be stored */ 
  119. /************************************************************
  120. The following function is used to fetch data from 6 consecutive
  121. bytes. The most significant byte is at the lowest address. */
  122. UNIV_INLINE
  123. dulint 
  124. mach_read_from_6(
  125. /*=============*/
  126. /* out: dulint integer */
  127. byte*   b);      /* in: pointer to 6 bytes */
  128. /***********************************************************
  129. The following function is used to store data in 7 consecutive
  130. bytes. We store the most significant byte to the lowest address. */
  131. UNIV_INLINE
  132. void 
  133. mach_write_to_7(
  134. /*============*/
  135. byte*   b,      /* in: pointer to 7 bytes where to store */
  136. dulint n);      /* in: dulint integer to be stored */ 
  137. /************************************************************
  138. The following function is used to fetch data from 7 consecutive
  139. bytes. The most significant byte is at the lowest address. */
  140. UNIV_INLINE
  141. dulint 
  142. mach_read_from_7(
  143. /*=============*/
  144. /* out: dulint integer */
  145. byte*   b);      /* in: pointer to 7 bytes */
  146. /***********************************************************
  147. The following function is used to store data in 8 consecutive
  148. bytes. We store the most significant byte to the lowest address. */
  149. UNIV_INLINE
  150. void 
  151. mach_write_to_8(
  152. /*============*/
  153. byte*   b,      /* in: pointer to 8 bytes where to store */
  154. dulint n);     /* in: dulint integer to be stored */ 
  155. /************************************************************
  156. The following function is used to fetch data from 8 consecutive
  157. bytes. The most significant byte is at the lowest address. */
  158. UNIV_INLINE
  159. dulint 
  160. mach_read_from_8(
  161. /*=============*/
  162. /* out: dulint integer */
  163. byte*   b);      /* in: pointer to 8 bytes */
  164. /*************************************************************
  165. Writes a dulint in a compressed form (5..9 bytes). */
  166. UNIV_INLINE
  167. ulint
  168. mach_dulint_write_compressed(
  169. /*=========================*/
  170. /* out: size in bytes */
  171. byte*   b,      /* in: pointer to memory where to store */
  172. dulint  n);     /* in: dulint integer to be stored */ 
  173. /*************************************************************
  174. Returns the size of a dulint when written in the compressed form. */
  175. UNIV_INLINE
  176. ulint
  177. mach_dulint_get_compressed_size(
  178. /*============================*/
  179. /* out: compressed size in bytes */
  180. dulint   n);    /* in: dulint integer to be stored */ 
  181. /*************************************************************
  182. Reads a dulint in a compressed form. */
  183. UNIV_INLINE
  184. dulint
  185. mach_dulint_read_compressed(
  186. /*========================*/
  187. /* out: read dulint */
  188. byte*   b);     /* in: pointer to memory from where to read */
  189. /*************************************************************
  190. Writes a dulint in a compressed form (1..11 bytes). */
  191. UNIV_INLINE
  192. ulint
  193. mach_dulint_write_much_compressed(
  194. /*==============================*/
  195. /* out: size in bytes */
  196. byte*   b,      /* in: pointer to memory where to store */
  197. dulint  n);     /* in: dulint integer to be stored */ 
  198. /*************************************************************
  199. Returns the size of a dulint when written in the compressed form. */
  200. UNIV_INLINE
  201. ulint
  202. mach_dulint_get_much_compressed_size(
  203. /*=================================*/
  204. /* out: compressed size in bytes */
  205. dulint   n);     /* in: dulint integer to be stored */ 
  206. /*************************************************************
  207. Reads a dulint in a compressed form. */
  208. UNIV_INLINE
  209. dulint
  210. mach_dulint_read_much_compressed(
  211. /*=============================*/
  212. /* out: read dulint */
  213. byte*   b);      /* in: pointer to memory from where to read */
  214. /*************************************************************
  215. Reads a ulint in a compressed form if the log record fully contains it. */
  216. byte*
  217. mach_parse_compressed(
  218. /*==================*/
  219. /* out: pointer to end of the stored field, NULL if
  220. not complete */
  221. byte*   ptr,    /* in: pointer to buffer from where to read */
  222. byte* end_ptr,/* in: pointer to end of the buffer */
  223. ulint* val); /* out: read value */ 
  224. /*************************************************************
  225. Reads a dulint in a compressed form if the log record fully contains it. */
  226. byte*
  227. mach_dulint_parse_compressed(
  228. /*=========================*/
  229. /* out: pointer to end of the stored field, NULL if
  230. not complete */
  231. byte*   ptr,    /* in: pointer to buffer from where to read */
  232. byte* end_ptr,/* in: pointer to end of the buffer */
  233. dulint* val); /* out: read value */ 
  234. /*************************************************************
  235. Reads a double. It is stored in a little-endian format. */
  236. UNIV_INLINE
  237. double
  238. mach_double_read(
  239. /*=============*/
  240. /* out: double read */
  241. byte*   b);      /* in: pointer to memory from where to read */
  242. /*************************************************************
  243. Writes a double. It is stored in a little-endian format. */
  244. UNIV_INLINE
  245. void
  246. mach_double_write(
  247. /*==============*/
  248. byte*   b,      /* in: pointer to memory where to write */
  249. double  d); /* in: double */
  250. /*************************************************************
  251. Reads a float. It is stored in a little-endian format. */
  252. UNIV_INLINE
  253. float
  254. mach_float_read(
  255. /*=============*/
  256. /* out: float read */
  257. byte*   b);      /* in: pointer to memory from where to read */
  258. /*************************************************************
  259. Writes a float. It is stored in a little-endian format. */
  260. UNIV_INLINE
  261. void
  262. mach_float_write(
  263. /*==============*/
  264. byte*   b,      /* in: pointer to memory where to write */
  265. float  d); /* in: float */
  266. /*************************************************************
  267. Reads a ulint stored in the little-endian format. */
  268. UNIV_INLINE
  269. ulint
  270. mach_read_from_n_little_endian(
  271. /*===========================*/
  272. /* out: unsigned long int */
  273. byte* buf, /* in: from where to read */
  274. ulint buf_size); /* in: from how many bytes to read */
  275. /*************************************************************
  276. Writes a ulint in the little-endian format. */
  277. UNIV_INLINE
  278. void
  279. mach_write_to_n_little_endian(
  280. /*==========================*/
  281. byte* dest, /* in: where to write */
  282. ulint dest_size, /* in: into how many bytes to write */
  283. ulint n); /* in: unsigned long int to write */
  284. /*************************************************************
  285. Reads a ulint stored in the little-endian format. */
  286. UNIV_INLINE
  287. ulint
  288. mach_read_from_2_little_endian(
  289. /*===========================*/
  290. /* out: unsigned long int */
  291. byte* buf); /* in: from where to read */
  292. /*************************************************************
  293. Writes a ulint in the little-endian format. */
  294. UNIV_INLINE
  295. void
  296. mach_write_to_2_little_endian(
  297. /*==========================*/
  298. byte* dest, /* in: where to write */
  299. ulint n); /* in: unsigned long int to write */
  300. #ifndef UNIV_NONINL
  301. #include "mach0data.ic"
  302. #endif
  303. #endif