diff options
Diffstat (limited to 'innobase/include/mach0data.h')
-rw-r--r-- | innobase/include/mach0data.h | 332 |
1 files changed, 332 insertions, 0 deletions
diff --git a/innobase/include/mach0data.h b/innobase/include/mach0data.h new file mode 100644 index 00000000000..006f55d5f1f --- /dev/null +++ b/innobase/include/mach0data.h @@ -0,0 +1,332 @@ +/********************************************************************** +Utilities for converting data from the database file +to the machine format. + +(c) 1995 Innobase Oy + +Created 11/28/1995 Heikki Tuuri +***********************************************************************/ + +#ifndef mach0data_h +#define mach0data_h + +#include "univ.i" +#include "ut0byte.h" + +/* The data and all fields are always stored in a database file +in the same format: ascii, big-endian, ... . +All data in the files MUST be accessed using the functions in this +module. */ + +/*********************************************************** +The following function is used to store data in one byte. */ +UNIV_INLINE +void +mach_write_to_1( +/*============*/ + byte* b, /* in: pointer to byte where to store */ + ulint n); /* in: ulint integer to be stored, >= 0, < 256 */ +/************************************************************ +The following function is used to fetch data from one byte. */ +UNIV_INLINE +ulint +mach_read_from_1( +/*=============*/ + /* out: ulint integer, >= 0, < 256 */ + byte* b); /* in: pointer to byte */ +/*********************************************************** +The following function is used to store data in two consecutive +bytes. We store the most significant byte to the lower address. */ +UNIV_INLINE +void +mach_write_to_2( +/*============*/ + byte* b, /* in: pointer to two bytes where to store */ + ulint n); /* in: ulint integer to be stored, >= 0, < 64k */ +/************************************************************ +The following function is used to fetch data from two consecutive +bytes. The most significant byte is at the lowest address. */ +UNIV_INLINE +ulint +mach_read_from_2( +/*=============*/ + /* out: ulint integer, >= 0, < 64k */ + byte* b); /* in: pointer to two bytes */ +/*********************************************************** +The following function is used to store data in 3 consecutive +bytes. We store the most significant byte to the lowest address. */ +UNIV_INLINE +void +mach_write_to_3( +/*============*/ + byte* b, /* in: pointer to 3 bytes where to store */ + ulint n); /* in: ulint integer to be stored */ +/************************************************************ +The following function is used to fetch data from 3 consecutive +bytes. The most significant byte is at the lowest address. */ +UNIV_INLINE +ulint +mach_read_from_3( +/*=============*/ + /* out: ulint integer */ + byte* b); /* in: pointer to 3 bytes */ +/*********************************************************** +The following function is used to store data in four consecutive +bytes. We store the most significant byte to the lowest address. */ +UNIV_INLINE +void +mach_write_to_4( +/*============*/ + byte* b, /* in: pointer to four bytes where to store */ + ulint n); /* in: ulint integer to be stored */ +/************************************************************ +The following function is used to fetch data from 4 consecutive +bytes. The most significant byte is at the lowest address. */ +UNIV_INLINE +ulint +mach_read_from_4( +/*=============*/ + /* out: ulint integer */ + byte* b); /* in: pointer to four bytes */ +/*********************************************************** +The following function is used to store data from a ulint to memory +in standard order: +we store the most significant byte to the lowest address. */ +UNIV_INLINE +void +mach_write( +/*=======*/ + byte* b, /* in: pointer to sizeof(ulint) bytes where to store */ + ulint n); /* in: ulint integer to be stored */ +/************************************************************ +The following function is used to fetch data from memory to a ulint. +The most significant byte is at the lowest address. */ +UNIV_INLINE +ulint +mach_read( +/*======*/ + /* out: ulint integer */ + byte* b); /* in: pointer to sizeof(ulint) bytes */ +/************************************************************* +Writes a ulint in a compressed form. */ +UNIV_INLINE +ulint +mach_write_compressed( +/*==================*/ + /* out: stored size in bytes */ + byte* b, /* in: pointer to memory where to store */ + ulint n); /* in: ulint integer to be stored */ +/************************************************************* +Returns the size of an ulint when written in the compressed form. */ +UNIV_INLINE +ulint +mach_get_compressed_size( +/*=====================*/ + /* out: compressed size in bytes */ + ulint n); /* in: ulint integer to be stored */ +/************************************************************* +Reads a ulint in a compressed form. */ +UNIV_INLINE +ulint +mach_read_compressed( +/*=================*/ + /* out: read integer */ + byte* b); /* in: pointer to memory from where to read */ +/*********************************************************** +The following function is used to store data in 6 consecutive +bytes. We store the most significant byte to the lowest address. */ +UNIV_INLINE +void +mach_write_to_6( +/*============*/ + byte* b, /* in: pointer to 6 bytes where to store */ + dulint n); /* in: dulint integer to be stored */ +/************************************************************ +The following function is used to fetch data from 6 consecutive +bytes. The most significant byte is at the lowest address. */ +UNIV_INLINE +dulint +mach_read_from_6( +/*=============*/ + /* out: dulint integer */ + byte* b); /* in: pointer to 6 bytes */ +/*********************************************************** +The following function is used to store data in 7 consecutive +bytes. We store the most significant byte to the lowest address. */ +UNIV_INLINE +void +mach_write_to_7( +/*============*/ + byte* b, /* in: pointer to 7 bytes where to store */ + dulint n); /* in: dulint integer to be stored */ +/************************************************************ +The following function is used to fetch data from 7 consecutive +bytes. The most significant byte is at the lowest address. */ +UNIV_INLINE +dulint +mach_read_from_7( +/*=============*/ + /* out: dulint integer */ + byte* b); /* in: pointer to 7 bytes */ +/*********************************************************** +The following function is used to store data in 8 consecutive +bytes. We store the most significant byte to the lowest address. */ +UNIV_INLINE +void +mach_write_to_8( +/*============*/ + byte* b, /* in: pointer to 8 bytes where to store */ + dulint n); /* in: dulint integer to be stored */ +/************************************************************ +The following function is used to fetch data from 8 consecutive +bytes. The most significant byte is at the lowest address. */ +UNIV_INLINE +dulint +mach_read_from_8( +/*=============*/ + /* out: dulint integer */ + byte* b); /* in: pointer to 8 bytes */ +/************************************************************* +Writes a dulint in a compressed form. */ +UNIV_INLINE +ulint +mach_dulint_write_compressed( +/*=========================*/ + /* out: size in bytes */ + byte* b, /* in: pointer to memory where to store */ + dulint n); /* in: dulint integer to be stored */ +/************************************************************* +Returns the size of a dulint when written in the compressed form. */ +UNIV_INLINE +ulint +mach_dulint_get_compressed_size( +/*============================*/ + /* out: compressed size in bytes */ + dulint n); /* in: dulint integer to be stored */ +/************************************************************* +Reads a dulint in a compressed form. */ +UNIV_INLINE +dulint +mach_dulint_read_compressed( +/*========================*/ + /* out: read dulint */ + byte* b); /* in: pointer to memory from where to read */ +/************************************************************* +Writes a dulint in a compressed form. */ +UNIV_INLINE +ulint +mach_dulint_write_much_compressed( +/*==============================*/ + /* out: size in bytes */ + byte* b, /* in: pointer to memory where to store */ + dulint n); /* in: dulint integer to be stored */ +/************************************************************* +Returns the size of a dulint when written in the compressed form. */ +UNIV_INLINE +ulint +mach_dulint_get_much_compressed_size( +/*=================================*/ + /* out: compressed size in bytes */ + dulint n); /* in: dulint integer to be stored */ +/************************************************************* +Reads a dulint in a compressed form. */ +UNIV_INLINE +dulint +mach_dulint_read_much_compressed( +/*=============================*/ + /* out: read dulint */ + byte* b); /* in: pointer to memory from where to read */ +/************************************************************* +Reads a ulint in a compressed form if the log record fully contains it. */ + +byte* +mach_parse_compressed( +/*==================*/ + /* out: pointer to end of the stored field, NULL if + not complete */ + byte* ptr, /* in: pointer to buffer from where to read */ + byte* end_ptr,/* in: pointer to end of the buffer */ + ulint* val); /* out: read value */ +/************************************************************* +Reads a dulint in a compressed form if the log record fully contains it. */ + +byte* +mach_dulint_parse_compressed( +/*=========================*/ + /* out: pointer to end of the stored field, NULL if + not complete */ + byte* ptr, /* in: pointer to buffer from where to read */ + byte* end_ptr,/* in: pointer to end of the buffer */ + dulint* val); /* out: read value */ +/************************************************************* +Reads a double. It is stored in a little-endian format. */ +UNIV_INLINE +double +mach_double_read( +/*=============*/ + /* out: double read */ + byte* b); /* in: pointer to memory from where to read */ +/************************************************************* +Writes a double. It is stored in a little-endian format. */ +UNIV_INLINE +void +mach_double_write( +/*==============*/ + byte* b, /* in: pointer to memory where to write */ + double d); /* in: double */ +/************************************************************* +Reads a float. It is stored in a little-endian format. */ +UNIV_INLINE +float +mach_float_read( +/*=============*/ + /* out: float read */ + byte* b); /* in: pointer to memory from where to read */ +/************************************************************* +Writes a float. It is stored in a little-endian format. */ +UNIV_INLINE +void +mach_float_write( +/*==============*/ + byte* b, /* in: pointer to memory where to write */ + float d); /* in: float */ +/************************************************************* +Reads a ulint stored in the little-endian format. */ +UNIV_INLINE +ulint +mach_read_from_n_little_endian( +/*===========================*/ + /* out: unsigned long int */ + byte* buf, /* in: from where to read */ + ulint buf_size); /* in: from how many bytes to read */ +/************************************************************* +Writes a ulint in the little-endian format. */ +UNIV_INLINE +void +mach_write_to_n_little_endian( +/*==========================*/ + byte* dest, /* in: where to write */ + ulint dest_size, /* in: into how many bytes to write */ + ulint n); /* in: unsigned long int to write */ +/************************************************************* +Reads a ulint stored in the little-endian format. */ +UNIV_INLINE +ulint +mach_read_from_2_little_endian( +/*===========================*/ + /* out: unsigned long int */ + byte* buf); /* in: from where to read */ +/************************************************************* +Writes a ulint in the little-endian format. */ +UNIV_INLINE +void +mach_write_to_2_little_endian( +/*==========================*/ + byte* dest, /* in: where to write */ + ulint n); /* in: unsigned long int to write */ + +#ifndef UNIV_NONINL +#include "mach0data.ic" +#endif + +#endif |