📄 ha0ha.h
字号:
/******************************************************The hash table with external chains(c) 1994-1997 Innobase OyCreated 8/18/1994 Heikki Tuuri*******************************************************/#ifndef ha0ha_h#define ha0ha_h#include "univ.i"#include "hash0hash.h"#include "page0types.h"/*****************************************************************Looks for an element in a hash table. */UNIV_INLINEvoid*ha_search_and_get_data(/*===================*/ /* out: pointer to the data of the first hash table node in chain having the fold number, NULL if not found */ hash_table_t* table, /* in: hash table */ ulint fold); /* in: folded value of the searched data *//*************************************************************Looks for an element when we know the pointer to the data and updatesthe pointer to data if found. */voidha_search_and_update_if_found(/*==========================*/ hash_table_t* table, /* in: hash table */ ulint fold, /* in: folded value of the searched data */ void* data, /* in: pointer to the data */ void* new_data);/* in: new pointer to the data *//*****************************************************************Creates a hash table with >= n array cells. The actual number of cells ischosen to be a prime number slightly bigger than n. */hash_table_t*ha_create(/*======*/ /* out, own: created table */ ibool in_btr_search, /* in: TRUE if the hash table is used in the btr_search module */ ulint n, /* in: number of array cells */ ulint n_mutexes, /* in: number of mutexes to protect the hash table: must be a power of 2 */ ulint mutex_level); /* in: level of the mutexes in the latching order: this is used in the debug version *//*****************************************************************Inserts an entry into a hash table. If an entry with the same fold numberis found, its node is updated to point to the new data, and no new nodeis inserted. */iboolha_insert_for_fold(/*===============*/ /* out: TRUE if succeed, FALSE if no more memory could be allocated */ hash_table_t* table, /* in: hash table */ ulint fold, /* in: folded value of data; if a node with the same fold value already exists, it is updated to point to the same data, and no new node is created! */ void* data); /* in: data, must not be NULL *//*****************************************************************Reserves the necessary hash table mutex and inserts an entry into the hashtable. */UNIV_INLINEiboolha_insert_for_fold_mutex(/*=====================*/ /* out: TRUE if succeed, FALSE if no more memory could be allocated */ hash_table_t* table, /* in: hash table */ ulint fold, /* in: folded value of data; if a node with the same fold value already exists, it is updated to point to the same data, and no new node is created! */ void* data); /* in: data, must not be NULL *//*****************************************************************Deletes an entry from a hash table. */voidha_delete(/*======*/ hash_table_t* table, /* in: hash table */ ulint fold, /* in: folded value of data */ void* data); /* in: data, must not be NULL and must exist in the hash table *//*************************************************************Looks for an element when we know the pointer to the data and deletesit from the hash table if found. */UNIV_INLINEiboolha_search_and_delete_if_found(/*==========================*/ /* out: TRUE if found */ hash_table_t* table, /* in: hash table */ ulint fold, /* in: folded value of the searched data */ void* data); /* in: pointer to the data *//*********************************************************************Removes from the chain determined by fold all nodes whose data pointerpoints to the page given. */voidha_remove_all_nodes_to_page(/*========================*/ hash_table_t* table, /* in: hash table */ ulint fold, /* in: fold value */ page_t* page); /* in: buffer page *//*****************************************************************Validates a given range of the cells in hash table. */iboolha_validate(/*========*/ /* out: TRUE if ok */ hash_table_t* table, /* in: hash table */ ulint start_index, /* in: start index */ ulint end_index); /* in: end index *//*****************************************************************Prints info of a hash table. */voidha_print_info(/*==========*/ FILE* file, /* in: file where to print */ hash_table_t* table); /* in: hash table *//* The hash table external chain node */typedef struct ha_node_struct ha_node_t;struct ha_node_struct { ha_node_t* next; /* next chain node or NULL if none */ void* data; /* pointer to the data */ ulint fold; /* fold value for the data */};#ifndef UNIV_NONINL#include "ha0ha.ic"#endif#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -