ha0ha.h
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:4k
源码类别:

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. UNIV_INLINE
  26. void
  27. ha_search_and_update_if_found(
  28. /*==========================*/
  29. hash_table_t* table, /* in: hash table */
  30. ulint fold, /* in: folded value of the searched data */
  31. void* data, /* in: pointer to the data */
  32. void* new_data);/* in: new pointer to the data */
  33. /*****************************************************************
  34. Creates a hash table with >= n array cells. The actual number of cells is
  35. chosen to be a prime number slightly bigger than n. */
  36. hash_table_t*
  37. ha_create(
  38. /*======*/
  39. /* out, own: created table */
  40. ibool in_btr_search, /* in: TRUE if the hash table is used in
  41. the btr_search module */
  42. ulint n, /* in: number of array cells */
  43. ulint n_mutexes, /* in: number of mutexes to protect the
  44. hash table: must be a power of 2 */
  45. ulint mutex_level); /* in: level of the mutexes in the latching
  46. order: this is used in the debug version */
  47. /*****************************************************************
  48. Inserts an entry into a hash table. If an entry with the same fold number
  49. is found, its node is updated to point to the new data, and no new node
  50. is inserted. */
  51. ibool
  52. ha_insert_for_fold(
  53. /*===============*/
  54. /* out: TRUE if succeed, FALSE if no more
  55. memory could be allocated */
  56. hash_table_t* table, /* in: hash table */
  57. ulint fold, /* in: folded value of data; if a node with
  58. the same fold value already exists, it is
  59. updated to point to the same data, and no new
  60. node is created! */
  61. void* data); /* in: data, must not be NULL */
  62. /*****************************************************************
  63. Reserves the necessary hash table mutex and inserts an entry into the hash
  64. table. */
  65. UNIV_INLINE
  66. ibool
  67. ha_insert_for_fold_mutex(
  68. /*=====================*/
  69. /* out: TRUE if succeed, FALSE if no more
  70. memory could be allocated */
  71. hash_table_t* table, /* in: hash table */
  72. ulint fold, /* in: folded value of data; if a node with
  73. the same fold value already exists, it is
  74. updated to point to the same data, and no new
  75. node is created! */
  76. void* data); /* in: data, must not be NULL */
  77. /*****************************************************************
  78. Deletes an entry from a hash table. */
  79. void
  80. ha_delete(
  81. /*======*/
  82. hash_table_t* table, /* in: hash table */
  83. ulint fold, /* in: folded value of data */
  84. void* data); /* in: data, must not be NULL and must exist
  85. in the hash table */
  86. /*************************************************************
  87. Looks for an element when we know the pointer to the data and deletes
  88. it from the hash table if found. */
  89. UNIV_INLINE
  90. ibool
  91. ha_search_and_delete_if_found(
  92. /*==========================*/
  93. /* out: TRUE if found */
  94. hash_table_t* table, /* in: hash table */
  95. ulint fold, /* in: folded value of the searched data */
  96. void* data); /* in: pointer to the data */
  97. /*********************************************************************
  98. Removes from the chain determined by fold all nodes whose data pointer
  99. points to the page given. */
  100. void
  101. ha_remove_all_nodes_to_page(
  102. /*========================*/
  103. hash_table_t* table, /* in: hash table */
  104. ulint fold, /* in: fold value */
  105. page_t* page); /* in: buffer page */
  106. /*****************************************************************
  107. Validates a hash table. */
  108. ibool
  109. ha_validate(
  110. /*========*/
  111. /* out: TRUE if ok */
  112. hash_table_t* table); /* in: hash table */
  113. /*****************************************************************
  114. Prints info of a hash table. */
  115. void
  116. ha_print_info(
  117. /*==========*/
  118. hash_table_t* table); /* in: hash table */
  119. #ifndef UNIV_NONINL
  120. #include "ha0ha.ic"
  121. #endif
  122. #endif