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

MySQL数据库

开发平台:

Visual C++

  1. /******************************************************
  2. The hash table with external chains
  3. (c) 1994-1997 Innobase Oy
  4. Created 8/18/1994 Heikki Tuuri
  5. *******************************************************/
  6. #ifndef ha0ha_h
  7. #define ha0ha_h
  8. #include "univ.i"
  9. #include "hash0hash.h"
  10. #include "page0types.h"
  11. /*****************************************************************
  12. Looks for an element in a hash table. */
  13. UNIV_INLINE
  14. void*
  15. ha_search_and_get_data(
  16. /*===================*/
  17. /* out: pointer to the data of the first hash
  18. table node in chain having the fold number,
  19. NULL if not found */
  20. hash_table_t* table, /* in: hash table */
  21. ulint fold); /* in: folded value of the searched data */
  22. /*************************************************************
  23. Looks for an element when we know the pointer to the data and updates
  24. the pointer to data if found. */
  25. void
  26. ha_search_and_update_if_found(
  27. /*==========================*/
  28. hash_table_t* table, /* in: hash table */
  29. ulint fold, /* in: folded value of the searched data */
  30. void* data, /* in: pointer to the data */
  31. void* new_data);/* in: new pointer to the data */
  32. /*****************************************************************
  33. Creates a hash table with >= n array cells. The actual number of cells is
  34. chosen to be a prime number slightly bigger than n. */
  35. hash_table_t*
  36. ha_create(
  37. /*======*/
  38. /* out, own: created table */
  39. ibool in_btr_search, /* in: TRUE if the hash table is used in
  40. the btr_search module */
  41. ulint n, /* in: number of array cells */
  42. ulint n_mutexes, /* in: number of mutexes to protect the
  43. hash table: must be a power of 2 */
  44. ulint mutex_level); /* in: level of the mutexes in the latching
  45. order: this is used in the debug version */
  46. /*****************************************************************
  47. Inserts an entry into a hash table. If an entry with the same fold number
  48. is found, its node is updated to point to the new data, and no new node
  49. is inserted. */
  50. ibool
  51. ha_insert_for_fold(
  52. /*===============*/
  53. /* out: TRUE if succeed, FALSE if no more
  54. memory could be allocated */
  55. hash_table_t* table, /* in: hash table */
  56. ulint fold, /* in: folded value of data; if a node with
  57. the same fold value already exists, it is
  58. updated to point to the same data, and no new
  59. node is created! */
  60. void* data); /* in: data, must not be NULL */
  61. /*****************************************************************
  62. Reserves the necessary hash table mutex and inserts an entry into the hash
  63. table. */
  64. UNIV_INLINE
  65. ibool
  66. ha_insert_for_fold_mutex(
  67. /*=====================*/
  68. /* out: TRUE if succeed, FALSE if no more
  69. memory could be allocated */
  70. hash_table_t* table, /* in: hash table */
  71. ulint fold, /* in: folded value of data; if a node with
  72. the same fold value already exists, it is
  73. updated to point to the same data, and no new
  74. node is created! */
  75. void* data); /* in: data, must not be NULL */
  76. /*****************************************************************
  77. Deletes an entry from a hash table. */
  78. void
  79. ha_delete(
  80. /*======*/
  81. hash_table_t* table, /* in: hash table */
  82. ulint fold, /* in: folded value of data */
  83. void* data); /* in: data, must not be NULL and must exist
  84. in the hash table */
  85. /*************************************************************
  86. Looks for an element when we know the pointer to the data and deletes
  87. it from the hash table if found. */
  88. UNIV_INLINE
  89. ibool
  90. ha_search_and_delete_if_found(
  91. /*==========================*/
  92. /* out: TRUE if found */
  93. hash_table_t* table, /* in: hash table */
  94. ulint fold, /* in: folded value of the searched data */
  95. void* data); /* in: pointer to the data */
  96. /*********************************************************************
  97. Removes from the chain determined by fold all nodes whose data pointer
  98. points to the page given. */
  99. void
  100. ha_remove_all_nodes_to_page(
  101. /*========================*/
  102. hash_table_t* table, /* in: hash table */
  103. ulint fold, /* in: fold value */
  104. page_t* page); /* in: buffer page */
  105. /*****************************************************************
  106. Validates a hash table. */
  107. ibool
  108. ha_validate(
  109. /*========*/
  110. /* out: TRUE if ok */
  111. hash_table_t* table); /* in: hash table */
  112. /*****************************************************************
  113. Prints info of a hash table. */
  114. void
  115. ha_print_info(
  116. /*==========*/
  117. FILE* file, /* in: file where to print */
  118. hash_table_t* table); /* in: hash table */
  119. /* The hash table external chain node */
  120. typedef struct ha_node_struct ha_node_t;
  121. struct ha_node_struct {
  122. ha_node_t* next; /* next chain node or NULL if none */
  123. void* data; /* pointer to the data */
  124. ulint fold; /* fold value for the data */
  125. };
  126. #ifndef UNIV_NONINL
  127. #include "ha0ha.ic"
  128. #endif
  129. #endif