1/*- 2 * See the file LICENSE for redistribution information. 3 * 4 * Copyright (c) 1997,2008 Oracle. All rights reserved. 5 * 6 * $Id: cxx_mpool.cpp,v 12.12 2008/01/08 20:58:09 bostic Exp $ 7 */ 8 9#include "db_config.h" 10 11#include "db_int.h" 12 13#include "db_cxx.h" 14#include "dbinc/cxx_int.h" 15 16// Helper macros for simple methods that pass through to the 17// underlying C method. It may return an error or raise an exception. 18// Note this macro expects that input _argspec is an argument 19// list element (e.g., "char *arg") and that _arglist is the arguments 20// that should be passed through to the C method (e.g., "(mpf, arg)") 21// 22#define DB_MPOOLFILE_METHOD(_name, _argspec, _arglist, _retok) \ 23int DbMpoolFile::_name _argspec \ 24{ \ 25 int ret; \ 26 DB_MPOOLFILE *mpf = unwrap(this); \ 27 \ 28 if (mpf == NULL) \ 29 ret = EINVAL; \ 30 else \ 31 ret = mpf->_name _arglist; \ 32 if (!_retok(ret)) \ 33 DB_ERROR(DbEnv::get_DbEnv(mpf->env->dbenv), \ 34 "DbMpoolFile::"#_name, ret, ON_ERROR_UNKNOWN); \ 35 return (ret); \ 36} 37 38#define DB_MPOOLFILE_METHOD_VOID(_name, _argspec, _arglist) \ 39void DbMpoolFile::_name _argspec \ 40{ \ 41 DB_MPOOLFILE *mpf = unwrap(this); \ 42 \ 43 mpf->_name _arglist; \ 44} 45 46//////////////////////////////////////////////////////////////////////// 47// // 48// DbMpoolFile // 49// // 50//////////////////////////////////////////////////////////////////////// 51 52DbMpoolFile::DbMpoolFile() 53: imp_(0) 54{ 55} 56 57DbMpoolFile::~DbMpoolFile() 58{ 59} 60 61int DbMpoolFile::close(u_int32_t flags) 62{ 63 DB_MPOOLFILE *mpf = unwrap(this); 64 int ret; 65 DbEnv *dbenv = DbEnv::get_DbEnv(mpf->env->dbenv); 66 67 if (mpf == NULL) 68 ret = EINVAL; 69 else 70 ret = mpf->close(mpf, flags); 71 72 imp_ = 0; // extra safety 73 74 // This may seem weird, but is legal as long as we don't access 75 // any data before returning. 76 delete this; 77 78 if (!DB_RETOK_STD(ret)) 79 DB_ERROR(dbenv, "DbMpoolFile::close", ret, ON_ERROR_UNKNOWN); 80 81 return (ret); 82} 83 84DB_MPOOLFILE_METHOD(get, 85 (db_pgno_t *pgnoaddr, DbTxn *txn, u_int32_t flags, void *pagep), 86 (mpf, pgnoaddr, unwrap(txn), flags, pagep), DB_RETOK_MPGET) 87DB_MPOOLFILE_METHOD(open, 88 (const char *file, u_int32_t flags, int mode, size_t pagesize), 89 (mpf, file, flags, mode, pagesize), DB_RETOK_STD) 90DB_MPOOLFILE_METHOD(put, 91 (void *pgaddr, DB_CACHE_PRIORITY priority, u_int32_t flags), 92 (mpf, pgaddr, priority, flags), DB_RETOK_STD) 93DB_MPOOLFILE_METHOD(get_clear_len, (u_int32_t *lenp), 94 (mpf, lenp), DB_RETOK_STD) 95DB_MPOOLFILE_METHOD(set_clear_len, (u_int32_t len), 96 (mpf, len), DB_RETOK_STD) 97DB_MPOOLFILE_METHOD(get_fileid, (u_int8_t *fileid), 98 (mpf, fileid), DB_RETOK_STD) 99DB_MPOOLFILE_METHOD(set_fileid, (u_int8_t *fileid), 100 (mpf, fileid), DB_RETOK_STD) 101DB_MPOOLFILE_METHOD(get_flags, (u_int32_t *flagsp), 102 (mpf, flagsp), DB_RETOK_STD) 103DB_MPOOLFILE_METHOD(set_flags, (u_int32_t flags, int onoff), 104 (mpf, flags, onoff), DB_RETOK_STD) 105DB_MPOOLFILE_METHOD(get_ftype, (int *ftypep), 106 (mpf, ftypep), DB_RETOK_STD) 107DB_MPOOLFILE_METHOD(set_ftype, (int ftype), 108 (mpf, ftype), DB_RETOK_STD) 109DB_MPOOLFILE_METHOD(get_last_pgno, (db_pgno_t *pgnop), 110 (mpf, pgnop), DB_RETOK_STD) 111DB_MPOOLFILE_METHOD(get_lsn_offset, (int32_t *offsetp), 112 (mpf, offsetp), DB_RETOK_STD) 113DB_MPOOLFILE_METHOD(set_lsn_offset, (int32_t offset), 114 (mpf, offset), DB_RETOK_STD) 115DB_MPOOLFILE_METHOD(get_maxsize, (u_int32_t *gbytesp, u_int32_t *bytesp), 116 (mpf, gbytesp, bytesp), DB_RETOK_STD) 117DB_MPOOLFILE_METHOD(set_maxsize, (u_int32_t gbytes, u_int32_t bytes), 118 (mpf, gbytes, bytes), DB_RETOK_STD) 119DB_MPOOLFILE_METHOD(get_pgcookie, (DBT *dbt), 120 (mpf, dbt), DB_RETOK_STD) 121DB_MPOOLFILE_METHOD(set_pgcookie, (DBT *dbt), 122 (mpf, dbt), DB_RETOK_STD) 123DB_MPOOLFILE_METHOD(get_priority, (DB_CACHE_PRIORITY *priorityp), 124 (mpf, priorityp), DB_RETOK_STD) 125DB_MPOOLFILE_METHOD(set_priority, (DB_CACHE_PRIORITY priority), 126 (mpf, priority), DB_RETOK_STD) 127DB_MPOOLFILE_METHOD(sync, (), 128 (mpf), DB_RETOK_STD) 129