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

MySQL数据库

开发平台:

Visual C++

  1. /******************************************************
  2. The simple hash table utility
  3. (c) 1997 Innobase Oy
  4. Created 5/20/1997 Heikki Tuuri
  5. *******************************************************/
  6. #include "ut0rnd.h"
  7. /****************************************************************
  8. Gets the nth cell in a hash table. */
  9. UNIV_INLINE
  10. hash_cell_t*
  11. hash_get_nth_cell(
  12. /*==============*/
  13. /* out: pointer to cell */
  14. hash_table_t*  table, /* in: hash table */
  15. ulint  n) /* in: cell index */
  16. {
  17. ut_ad(n < table->n_cells);
  18. return(table->array + n);
  19. }
  20. /*****************************************************************
  21. Returns the number of cells in a hash table. */
  22. UNIV_INLINE
  23. ulint
  24. hash_get_n_cells(
  25. /*=============*/
  26. /* out: number of cells */
  27. hash_table_t* table) /* in: table */
  28. {
  29. return(table->n_cells);
  30. }
  31. /******************************************************************
  32. Calculates the hash value from a folded value. */
  33. UNIV_INLINE
  34. ulint
  35. hash_calc_hash(
  36. /*===========*/
  37. /* out: hashed value */
  38. ulint fold, /* in: folded value */
  39. hash_table_t* table) /* in: hash table */
  40. {
  41. return(ut_hash_ulint(fold, table->n_cells));
  42. }
  43. /****************************************************************
  44. Gets the mutex index for a fold value in a hash table. */
  45. UNIV_INLINE
  46. ulint
  47. hash_get_mutex_no(
  48. /*==============*/
  49. /* out: mutex number */
  50. hash_table_t*  table, /* in: hash table */
  51. ulint  fold) /* in: fold */
  52. {
  53. return(ut_2pow_remainder(fold, table->n_mutexes));
  54. }
  55. /****************************************************************
  56. Gets the nth heap in a hash table. */
  57. UNIV_INLINE
  58. mem_heap_t*
  59. hash_get_nth_heap(
  60. /*==============*/
  61. /* out: mem heap */
  62. hash_table_t*  table, /* in: hash table */
  63. ulint  i) /* in: index of the heap */
  64. {
  65. ut_ad(i < table->n_mutexes);
  66. return(table->heaps[i]);
  67. }
  68. /****************************************************************
  69. Gets the heap for a fold value in a hash table. */
  70. UNIV_INLINE
  71. mem_heap_t*
  72. hash_get_heap(
  73. /*==========*/
  74. /* out: mem heap */
  75. hash_table_t*  table, /* in: hash table */
  76. ulint  fold) /* in: fold */
  77. {
  78. ulint i;
  79. if (table->heap) {
  80. return(table->heap);
  81. }
  82. i = hash_get_mutex_no(table, fold);
  83. return(hash_get_nth_heap(table, i));
  84. }
  85. /****************************************************************
  86. Gets the nth mutex in a hash table. */
  87. UNIV_INLINE
  88. mutex_t*
  89. hash_get_nth_mutex(
  90. /*===============*/
  91. /* out: mutex */
  92. hash_table_t*  table, /* in: hash table */
  93. ulint  i) /* in: index of the mutex */
  94. {
  95. ut_ad(i < table->n_mutexes);
  96. return(table->mutexes + i);
  97. }
  98. /****************************************************************
  99. Gets the mutex for a fold value in a hash table. */
  100. UNIV_INLINE
  101. mutex_t*
  102. hash_get_mutex(
  103. /*===========*/
  104. /* out: mutex */
  105. hash_table_t*  table, /* in: hash table */
  106. ulint  fold) /* in: fold */
  107. {
  108. ulint i;
  109. i = hash_get_mutex_no(table, fold);
  110. return(hash_get_nth_mutex(table, i));
  111. }