mariadb/innobase/include/hash0hash.ic
unknown a7139dd280 Cset exclude: marko@hundin.mysql.fi|ChangeSet|20040311211202|05613
innobase/trx/trx0sys.c:
  Remove #ifdef UNIV_HOT_BACKUP: best to keep the codebase as uniform as possible
innobase/dict/dict0dict.c:
  Exclude
innobase/dict/dict0mem.c:
  Exclude
innobase/ha/hash0hash.c:
  Exclude
innobase/include/data0data.h:
  Exclude
innobase/include/dict0mem.h:
  Exclude
innobase/include/hash0hash.h:
  Exclude
innobase/include/hash0hash.ic:
  Exclude
innobase/include/mtr0mtr.h:
  Exclude
innobase/include/row0ins.h:
  Exclude
innobase/include/row0upd.h:
  Exclude
innobase/row/row0ins.c:
  Exclude
innobase/row/row0upd.c:
  Exclude
innobase/thr/thr0loc.c:
  Exclude
2004-06-17 13:25:06 +03:00

130 lines
2.9 KiB
Text

/******************************************************
The simple hash table utility
(c) 1997 Innobase Oy
Created 5/20/1997 Heikki Tuuri
*******************************************************/
#include "ut0rnd.h"
/****************************************************************
Gets the nth cell in a hash table. */
UNIV_INLINE
hash_cell_t*
hash_get_nth_cell(
/*==============*/
/* out: pointer to cell */
hash_table_t* table, /* in: hash table */
ulint n) /* in: cell index */
{
ut_ad(n < table->n_cells);
return(table->array + n);
}
/*****************************************************************
Returns the number of cells in a hash table. */
UNIV_INLINE
ulint
hash_get_n_cells(
/*=============*/
/* out: number of cells */
hash_table_t* table) /* in: table */
{
return(table->n_cells);
}
/******************************************************************
Calculates the hash value from a folded value. */
UNIV_INLINE
ulint
hash_calc_hash(
/*===========*/
/* out: hashed value */
ulint fold, /* in: folded value */
hash_table_t* table) /* in: hash table */
{
return(ut_hash_ulint(fold, table->n_cells));
}
/****************************************************************
Gets the mutex index for a fold value in a hash table. */
UNIV_INLINE
ulint
hash_get_mutex_no(
/*==============*/
/* out: mutex number */
hash_table_t* table, /* in: hash table */
ulint fold) /* in: fold */
{
return(ut_2pow_remainder(fold, table->n_mutexes));
}
/****************************************************************
Gets the nth heap in a hash table. */
UNIV_INLINE
mem_heap_t*
hash_get_nth_heap(
/*==============*/
/* out: mem heap */
hash_table_t* table, /* in: hash table */
ulint i) /* in: index of the heap */
{
ut_ad(i < table->n_mutexes);
return(table->heaps[i]);
}
/****************************************************************
Gets the heap for a fold value in a hash table. */
UNIV_INLINE
mem_heap_t*
hash_get_heap(
/*==========*/
/* out: mem heap */
hash_table_t* table, /* in: hash table */
ulint fold) /* in: fold */
{
ulint i;
if (table->heap) {
return(table->heap);
}
i = hash_get_mutex_no(table, fold);
return(hash_get_nth_heap(table, i));
}
/****************************************************************
Gets the nth mutex in a hash table. */
UNIV_INLINE
mutex_t*
hash_get_nth_mutex(
/*===============*/
/* out: mutex */
hash_table_t* table, /* in: hash table */
ulint i) /* in: index of the mutex */
{
ut_ad(i < table->n_mutexes);
return(table->mutexes + i);
}
/****************************************************************
Gets the mutex for a fold value in a hash table. */
UNIV_INLINE
mutex_t*
hash_get_mutex(
/*===========*/
/* out: mutex */
hash_table_t* table, /* in: hash table */
ulint fold) /* in: fold */
{
ulint i;
i = hash_get_mutex_no(table, fold);
return(hash_get_nth_mutex(table, i));
}