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

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 1999, 2000
  5.  * Sleepycat Software.  All rights reserved.
  6.  */
  7. #include "db_config.h"
  8. #ifndef lint
  9. static const char revid[] = "$Id: hash_method.c,v 11.7 2000/07/04 18:28:23 bostic Exp $";
  10. #endif /* not lint */
  11. #ifndef NO_SYSTEM_INCLUDES
  12. #include <sys/types.h>
  13. #endif
  14. #include "db_int.h"
  15. #include "db_page.h"
  16. #include "hash.h"
  17. static int __ham_set_h_ffactor __P((DB *, u_int32_t));
  18. static int __ham_set_h_hash
  19.        __P((DB *, u_int32_t(*)(DB *, const void *, u_int32_t)));
  20. static int __ham_set_h_nelem __P((DB *, u_int32_t));
  21. /*
  22.  * __ham_db_create --
  23.  * Hash specific initialization of the DB structure.
  24.  *
  25.  * PUBLIC: int __ham_db_create __P((DB *));
  26.  */
  27. int
  28. __ham_db_create(dbp)
  29. DB *dbp;
  30. {
  31. HASH *hashp;
  32. int ret;
  33. if ((ret = __os_malloc(dbp->dbenv,
  34.     sizeof(HASH), NULL, &dbp->h_internal)) != 0)
  35. return (ret);
  36. hashp = dbp->h_internal;
  37. hashp->h_nelem = 0; /* Defaults. */
  38. hashp->h_ffactor = 0;
  39. hashp->h_hash = NULL;
  40. dbp->set_h_ffactor = __ham_set_h_ffactor;
  41. dbp->set_h_hash = __ham_set_h_hash;
  42. dbp->set_h_nelem = __ham_set_h_nelem;
  43. return (0);
  44. }
  45. /*
  46.  * PUBLIC: int __ham_db_close __P((DB *));
  47.  */
  48. int
  49. __ham_db_close(dbp)
  50. DB *dbp;
  51. {
  52. if (dbp->h_internal == NULL)
  53. return (0);
  54. __os_free(dbp->h_internal, sizeof(HASH));
  55. dbp->h_internal = NULL;
  56. return (0);
  57. }
  58. /*
  59.  * __ham_set_h_ffactor --
  60.  * Set the fill factor.
  61.  */
  62. static int
  63. __ham_set_h_ffactor(dbp, h_ffactor)
  64. DB *dbp;
  65. u_int32_t h_ffactor;
  66. {
  67. HASH *hashp;
  68. DB_ILLEGAL_AFTER_OPEN(dbp, "set_h_ffactor");
  69. DB_ILLEGAL_METHOD(dbp, DB_OK_HASH);
  70. hashp = dbp->h_internal;
  71. hashp->h_ffactor = h_ffactor;
  72. return (0);
  73. }
  74. /*
  75.  * __ham_set_h_hash --
  76.  * Set the hash function.
  77.  */
  78. static int
  79. __ham_set_h_hash(dbp, func)
  80. DB *dbp;
  81. u_int32_t (*func) __P((DB *, const void *, u_int32_t));
  82. {
  83. HASH *hashp;
  84. DB_ILLEGAL_AFTER_OPEN(dbp, "set_h_hash");
  85. DB_ILLEGAL_METHOD(dbp, DB_OK_HASH);
  86. hashp = dbp->h_internal;
  87. hashp->h_hash = func;
  88. return (0);
  89. }
  90. /*
  91.  * __ham_set_h_nelem --
  92.  * Set the table size.
  93.  */
  94. static int
  95. __ham_set_h_nelem(dbp, h_nelem)
  96. DB *dbp;
  97. u_int32_t h_nelem;
  98. {
  99. HASH *hashp;
  100. DB_ILLEGAL_AFTER_OPEN(dbp, "set_h_nelem");
  101. DB_ILLEGAL_METHOD(dbp, DB_OK_HASH);
  102. hashp = dbp->h_internal;
  103. hashp->h_nelem = h_nelem;
  104. return (0);
  105. }