00001 /********************************************************************** 00002 File-based list utilities 00003 00004 (c) 1995 Innobase Oy 00005 00006 Created 11/28/1995 Heikki Tuuri 00007 ***********************************************************************/ 00008 00009 #ifndef fut0lst_h 00010 #define fut0lst_h 00011 00012 #include "univ.i" 00013 00014 #include "fil0fil.h" 00015 #include "mtr0mtr.h" 00016 00017 00018 /* The C 'types' of base node and list node: these should be used to 00019 write self-documenting code. Of course, the sizeof macro cannot be 00020 applied to these types! */ 00021 00022 typedef byte flst_base_node_t; 00023 typedef byte flst_node_t; 00024 00025 /* The physical size of a list base node in bytes */ 00026 #define FLST_BASE_NODE_SIZE (4 + 2 * FIL_ADDR_SIZE) 00027 00028 /* The physical size of a list node in bytes */ 00029 #define FLST_NODE_SIZE (2 * FIL_ADDR_SIZE) 00030 00031 00032 /************************************************************************ 00033 Initializes a list base node. */ 00034 UNIV_INLINE 00035 void 00036 flst_init( 00037 /*======*/ 00038 flst_base_node_t* base, /* in: pointer to base node */ 00039 mtr_t* mtr); /* in: mini-transaction handle */ 00040 /************************************************************************ 00041 Adds a node as the last node in a list. */ 00042 00043 void 00044 flst_add_last( 00045 /*==========*/ 00046 flst_base_node_t* base, /* in: pointer to base node of list */ 00047 flst_node_t* node, /* in: node to add */ 00048 mtr_t* mtr); /* in: mini-transaction handle */ 00049 /************************************************************************ 00050 Adds a node as the first node in a list. */ 00051 00052 void 00053 flst_add_first( 00054 /*===========*/ 00055 flst_base_node_t* base, /* in: pointer to base node of list */ 00056 flst_node_t* node, /* in: node to add */ 00057 mtr_t* mtr); /* in: mini-transaction handle */ 00058 /************************************************************************ 00059 Inserts a node after another in a list. */ 00060 00061 void 00062 flst_insert_after( 00063 /*==============*/ 00064 flst_base_node_t* base, /* in: pointer to base node of list */ 00065 flst_node_t* node1, /* in: node to insert after */ 00066 flst_node_t* node2, /* in: node to add */ 00067 mtr_t* mtr); /* in: mini-transaction handle */ 00068 /************************************************************************ 00069 Inserts a node before another in a list. */ 00070 00071 void 00072 flst_insert_before( 00073 /*===============*/ 00074 flst_base_node_t* base, /* in: pointer to base node of list */ 00075 flst_node_t* node2, /* in: node to insert */ 00076 flst_node_t* node3, /* in: node to insert before */ 00077 mtr_t* mtr); /* in: mini-transaction handle */ 00078 /************************************************************************ 00079 Removes a node. */ 00080 00081 void 00082 flst_remove( 00083 /*========*/ 00084 flst_base_node_t* base, /* in: pointer to base node of list */ 00085 flst_node_t* node2, /* in: node to remove */ 00086 mtr_t* mtr); /* in: mini-transaction handle */ 00087 /************************************************************************ 00088 Cuts off the tail of the list, including the node given. The number of 00089 nodes which will be removed must be provided by the caller, as this function 00090 does not measure the length of the tail. */ 00091 00092 void 00093 flst_cut_end( 00094 /*=========*/ 00095 flst_base_node_t* base, /* in: pointer to base node of list */ 00096 flst_node_t* node2, /* in: first node to remove */ 00097 ulint n_nodes,/* in: number of nodes to remove, 00098 must be >= 1 */ 00099 mtr_t* mtr); /* in: mini-transaction handle */ 00100 /************************************************************************ 00101 Cuts off the tail of the list, not including the given node. The number of 00102 nodes which will be removed must be provided by the caller, as this function 00103 does not measure the length of the tail. */ 00104 00105 void 00106 flst_truncate_end( 00107 /*==============*/ 00108 flst_base_node_t* base, /* in: pointer to base node of list */ 00109 flst_node_t* node2, /* in: first node not to remove */ 00110 ulint n_nodes,/* in: number of nodes to remove */ 00111 mtr_t* mtr); /* in: mini-transaction handle */ 00112 /************************************************************************ 00113 Gets list length. */ 00114 UNIV_INLINE 00115 ulint 00116 flst_get_len( 00117 /*=========*/ 00118 /* out: length */ 00119 flst_base_node_t* base, /* in: pointer to base node */ 00120 mtr_t* mtr); /* in: mini-transaction handle */ 00121 /************************************************************************ 00122 Gets list first node address. */ 00123 UNIV_INLINE 00124 fil_addr_t 00125 flst_get_first( 00126 /*===========*/ 00127 /* out: file address */ 00128 flst_base_node_t* base, /* in: pointer to base node */ 00129 mtr_t* mtr); /* in: mini-transaction handle */ 00130 /************************************************************************ 00131 Gets list last node address. */ 00132 UNIV_INLINE 00133 fil_addr_t 00134 flst_get_last( 00135 /*==========*/ 00136 /* out: file address */ 00137 flst_base_node_t* base, /* in: pointer to base node */ 00138 mtr_t* mtr); /* in: mini-transaction handle */ 00139 /************************************************************************ 00140 Gets list next node address. */ 00141 UNIV_INLINE 00142 fil_addr_t 00143 flst_get_next_addr( 00144 /*===============*/ 00145 /* out: file address */ 00146 flst_node_t* node, /* in: pointer to node */ 00147 mtr_t* mtr); /* in: mini-transaction handle */ 00148 /************************************************************************ 00149 Gets list prev node address. */ 00150 UNIV_INLINE 00151 fil_addr_t 00152 flst_get_prev_addr( 00153 /*===============*/ 00154 /* out: file address */ 00155 flst_node_t* node, /* in: pointer to node */ 00156 mtr_t* mtr); /* in: mini-transaction handle */ 00157 /************************************************************************ 00158 Writes a file address. */ 00159 UNIV_INLINE 00160 void 00161 flst_write_addr( 00162 /*============*/ 00163 fil_faddr_t* faddr, /* in: pointer to file faddress */ 00164 fil_addr_t addr, /* in: file address */ 00165 mtr_t* mtr); /* in: mini-transaction handle */ 00166 /************************************************************************ 00167 Reads a file address. */ 00168 UNIV_INLINE 00169 fil_addr_t 00170 flst_read_addr( 00171 /*===========*/ 00172 /* out: file address */ 00173 fil_faddr_t* faddr, /* in: pointer to file faddress */ 00174 mtr_t* mtr); /* in: mini-transaction handle */ 00175 /************************************************************************ 00176 Validates a file-based list. */ 00177 00178 ibool 00179 flst_validate( 00180 /*==========*/ 00181 /* out: TRUE if ok */ 00182 flst_base_node_t* base, /* in: pointer to base node of list */ 00183 mtr_t* mtr1); /* in: mtr */ 00184 /************************************************************************ 00185 Prints info of a file-based list. */ 00186 00187 void 00188 flst_print( 00189 /*=======*/ 00190 flst_base_node_t* base, /* in: pointer to base node of list */ 00191 mtr_t* mtr); /* in: mtr */ 00192 00193 00194 #ifndef UNIV_NONINL 00195 #include "fut0lst.ic" 00196 #endif 00197 00198 #endif
1.4.7

