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

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 1997, 1998, 1999, 2000
  5.  * Sleepycat Software.  All rights reserved.
  6.  */
  7. #include "db_config.h"
  8. #ifndef lint
  9. static const char revid[] = "$Id: cxx_mpool.cpp,v 11.11 2000/09/21 15:05:45 dda Exp $";
  10. #endif /* not lint */
  11. #include <errno.h>
  12. #include "db_cxx.h"
  13. #include "cxx_int.h"
  14. ////////////////////////////////////////////////////////////////////////
  15. //                                                                    //
  16. //                            DbMpoolFile                             //
  17. //                                                                    //
  18. ////////////////////////////////////////////////////////////////////////
  19. DbMpoolFile::DbMpoolFile()
  20. : imp_(0)
  21. {
  22. }
  23. DbMpoolFile::~DbMpoolFile()
  24. {
  25. }
  26. int DbMpoolFile::open(DbEnv *envp, const char *file,
  27.       u_int32_t flags, int mode, size_t pagesize,
  28.       DB_MPOOL_FINFO *finfop, DbMpoolFile **result)
  29. {
  30. int err;
  31. DB_MPOOLFILE *mpf;
  32. DB_ENV *env = unwrap(envp);
  33. if ((err = ::memp_fopen(env, file, flags, mode, pagesize,
  34. finfop, &mpf)) != 0) {
  35. DB_ERROR("DbMpoolFile::open", err, envp->error_policy());
  36. return (err);
  37. }
  38. *result = new DbMpoolFile();
  39. (*result)->imp_ = wrap(mpf);
  40. return (0);
  41. }
  42. int DbMpoolFile::close()
  43. {
  44. DB_MPOOLFILE *mpf = unwrap(this);
  45. int err = 0;
  46. if (!mpf) {
  47. err = EINVAL;
  48. }
  49. else if ((err = ::memp_fclose(mpf)) != 0) {
  50. DB_ERROR("DbMpoolFile::close", err, ON_ERROR_UNKNOWN);
  51. return (err);
  52. }
  53. imp_ = 0;                   // extra safety
  54. // This may seem weird, but is legal as long as we don't access
  55. // any data before returning.
  56. //
  57. delete this;
  58. return (0);
  59. }
  60. int DbMpoolFile::get(db_pgno_t *pgnoaddr, u_int32_t flags, void *pagep)
  61. {
  62. DB_MPOOLFILE *mpf = unwrap(this);
  63. int err = 0;
  64. if (!mpf) {
  65. err = EINVAL;
  66. }
  67. else if ((err = ::memp_fget(mpf, pgnoaddr, flags, pagep)) != 0) {
  68. DB_ERROR("DbMpoolFile::get", err, ON_ERROR_UNKNOWN);
  69. }
  70. return (err);
  71. }
  72. int DbMpoolFile::put(void *pgaddr, u_int32_t flags)
  73. {
  74. DB_MPOOLFILE *mpf = unwrap(this);
  75. int err = 0;
  76. if (!mpf) {
  77. err = EINVAL;
  78. }
  79. else if ((err = ::memp_fput(mpf, pgaddr, flags)) != 0) {
  80. DB_ERROR("DbMpoolFile::put", err, ON_ERROR_UNKNOWN);
  81. }
  82. return (err);
  83. }
  84. int DbMpoolFile::set(void *pgaddr, u_int32_t flags)
  85. {
  86. DB_MPOOLFILE *mpf = unwrap(this);
  87. int err = 0;
  88. if (!mpf) {
  89. err = EINVAL;
  90. }
  91. else if ((err = ::memp_fset(mpf, pgaddr, flags)) != 0) {
  92. DB_ERROR("DbMpoolFile::set", err, ON_ERROR_UNKNOWN);
  93. }
  94. return (err);
  95. }
  96. int DbMpoolFile::sync()
  97. {
  98. DB_MPOOLFILE *mpf = unwrap(this);
  99. int err = 0;
  100. if (!mpf) {
  101. err = EINVAL;
  102. }
  103. else if ((err = ::memp_fsync(mpf)) != 0 && err != DB_INCOMPLETE) {
  104. DB_ERROR("DbMpoolFile::sync", err, ON_ERROR_UNKNOWN);
  105. }
  106. return (err);
  107. }
  108. ////////////////////////////////////////////////////////////////////////
  109. //                                                                    //
  110. //                            DbMpool                                 //
  111. //                                                                    //
  112. ////////////////////////////////////////////////////////////////////////
  113. int DbEnv::memp_register(int ftype,
  114.  pgin_fcn_type pgin_fcn,
  115.  pgout_fcn_type pgout_fcn)
  116. {
  117. DB_ENV *env = unwrap(this);
  118. int err = 0;
  119. if ((err = ::memp_register(env, ftype, pgin_fcn, pgout_fcn)) != 0) {
  120. DB_ERROR("DbEnv::memp_register", err, error_policy());
  121. return (err);
  122. }
  123. return (err);
  124. }
  125. int DbEnv::memp_stat(DB_MPOOL_STAT **gsp, DB_MPOOL_FSTAT ***fsp,
  126.      db_malloc_fcn_type db_malloc_fcn)
  127. {
  128. DB_ENV *env = unwrap(this);
  129. int err = 0;
  130. if ((err = ::memp_stat(env, gsp, fsp, db_malloc_fcn)) != 0) {
  131. DB_ERROR("DbEnv::memp_stat", err, error_policy());
  132. return (err);
  133. }
  134. return (err);
  135. }
  136. int DbEnv::memp_sync(DbLsn *sn)
  137. {
  138. DB_ENV *env = unwrap(this);
  139. int err = 0;
  140. if ((err = ::memp_sync(env, sn)) != 0 && err != DB_INCOMPLETE) {
  141. DB_ERROR("DbEnv::memp_sync", err, error_policy());
  142. return (err);
  143. }
  144. return (err);
  145. }
  146. int DbEnv::memp_trickle(int pct, int *nwrotep)
  147. {
  148. DB_ENV *env = unwrap(this);
  149. int err = 0;
  150. if ((err = ::memp_trickle(env, pct, nwrotep)) != 0) {
  151. DB_ERROR("DbEnv::memp_trickle", err, error_policy());
  152. return (err);
  153. }
  154. return (err);
  155. }