📄 db_int.in
字号:
/*- * See the file LICENSE for redistribution information. * * Copyright (c) 1996-2002 * Sleepycat Software. All rights reserved. * * $Id: db_int.in,v 11.106 2002/09/10 02:48:08 bostic Exp $ */#ifndef _DB_INTERNAL_H_#define _DB_INTERNAL_H_/******************************************************* * System includes, db.h, a few general DB includes. The DB includes are * here because it's OK if db_int.h includes queue structure declarations. *******************************************************/#ifndef NO_SYSTEM_INCLUDES#if defined(__STDC__) || defined(__cplusplus)#include <stdarg.h>#else#include <varargs.h>#endif#include <errno.h>#endif#include "db.h"#include "dbinc/queue.h"#include "dbinc/shqueue.h"#if defined(__cplusplus)extern "C" {#endif/******************************************************* * General purpose constants and macros. *******************************************************/#define UINT16_T_MAX 0xffff /* Maximum 16 bit unsigned. */#define UINT32_T_MAX 0xffffffff /* Maximum 32 bit unsigned. */#define MEGABYTE 1048576#define GIGABYTE 1073741824#define MS_PER_SEC 1000 /* Milliseconds in a second. */#define USEC_PER_MS 1000 /* Microseconds in a millisecond. */#define RECNO_OOB 0 /* Illegal record number. *//* Test for a power-of-two (tests true for zero, which doesn't matter here). */#define POWER_OF_TWO(x) (((x) & ((x) - 1)) == 0)/* Test for valid page sizes. */#define DB_MIN_PGSIZE 0x000200 /* Minimum page size (512). */#define DB_MAX_PGSIZE 0x010000 /* Maximum page size (65536). */#define IS_VALID_PAGESIZE(x) \ (POWER_OF_TWO(x) && (x) >= DB_MIN_PGSIZE && ((x) <= DB_MAX_PGSIZE))/* Minimum number of pages cached, by default. */#define DB_MINPAGECACHE 16/* * If we are unable to determine the underlying filesystem block size, use * 8K on the grounds that most OS's use less than 8K for a VM page size. */#define DB_DEF_IOSIZE (8 * 1024)/* * Aligning items to particular sizes or in pages or memory. * * db_align_t -- * Largest integral type, used to align structures in memory. We don't store * floating point types in structures, so integral types should be sufficient * (and we don't have to worry about systems that store floats in other than * power-of-2 numbers of bytes). Additionally this fixes compiler that rewrite * structure assignments and ANSI C memcpy calls to be in-line instructions * that happen to require alignment. Note: this alignment isn't sufficient for * mutexes, which depend on things like cache line alignment. Mutex alignment * is handled separately, in mutex.h. * * db_alignp_t -- * Integral type that's the same size as a pointer. There are places where * DB modifies pointers by discarding the bottom bits to guarantee alignment. * We can't use db_align_t, it may be larger than the pointer, and compilers * get upset about that. So far we haven't run on any machine where there * isn't an integral type the same size as a pointer -- here's hoping. */@db_align_t_decl@@db_alignp_t_decl@/* Align an integer to a specific boundary. */#undef ALIGN#define ALIGN(v, bound) (((v) + (bound) - 1) & ~(((db_align_t)bound) - 1))/* * Print an address as a u_long (a u_long is the largest type we can print * portably). Most 64-bit systems have made longs 64-bits, so this should * work. */#define P_TO_ULONG(p) ((u_long)(db_alignp_t)(p))/* * Convert a pointer to a small integral value. * * The (u_int16_t)(db_alignp_t) cast avoids warnings: the (db_alignp_t) cast * converts the value to an integral type, and the (u_int16_t) cast converts * it to a small integral type so we don't get complaints when we assign the * final result to an integral type smaller than db_alignp_t. */#define P_TO_UINT32(p) ((u_int32_t)(db_alignp_t)(p))#define P_TO_UINT16(p) ((u_int16_t)(db_alignp_t)(p))/* * There are several on-page structures that are declared to have a number of * fields followed by a variable length array of items. The structure size * without including the variable length array or the address of the first of * those elements can be found using SSZ. * * This macro can also be used to find the offset of a structure element in a * structure. This is used in various places to copy structure elements from * unaligned memory references, e.g., pointers into a packed page. * * There are two versions because compilers object if you take the address of * an array. */#undef SSZ#define SSZ(name, field) P_TO_UINT16(&(((name *)0)->field))#undef SSZA#define SSZA(name, field) P_TO_UINT16(&(((name *)0)->field[0]))/* Structure used to print flag values. */typedef struct __fn { u_int32_t mask; /* Flag value. */ const char *name; /* Flag name. */} FN;/* Set, clear and test flags. */#define FLD_CLR(fld, f) (fld) &= ~(f)#define FLD_ISSET(fld, f) ((fld) & (f))#define FLD_SET(fld, f) (fld) |= (f)#define F_CLR(p, f) (p)->flags &= ~(f)#define F_ISSET(p, f) ((p)->flags & (f))#define F_SET(p, f) (p)->flags |= (f)#define LF_CLR(f) ((flags) &= ~(f))#define LF_ISSET(f) ((flags) & (f))#define LF_SET(f) ((flags) |= (f))/* Display separator string. */#undef DB_LINE#define DB_LINE "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-="/* Unused, or not-used-yet variable. "Shut that bloody compiler up!" */#define COMPQUIET(n, v) (n) = (v)/******************************************************* * API return values *******************************************************/ /* * Return values that are OK for each different call. Most calls have * a standard 'return of 0 is only OK value', but some, like db->get * have DB_NOTFOUND as a return value, but it really isn't an error. */#define DB_RETOK_STD(ret) ((ret) == 0)#define DB_RETOK_DBCDEL(ret) ((ret) == 0 || (ret) == DB_KEYEMPTY || \ (ret) == DB_NOTFOUND)#define DB_RETOK_DBCGET(ret) DB_RETOK_DBGET(ret)#define DB_RETOK_DBCPUT(ret) ((ret) == 0 || (ret) == DB_KEYEXIST || \ (ret) == DB_NOTFOUND)#define DB_RETOK_DBDEL(ret) ((ret) == 0 || (ret) == DB_NOTFOUND)#define DB_RETOK_DBGET(ret) ((ret) == 0 || (ret) == DB_KEYEMPTY || \ (ret) == DB_NOTFOUND)#define DB_RETOK_DBPUT(ret) ((ret) == 0 || (ret) == DB_KEYEXIST)#define DB_RETOK_LGGET(ret) ((ret) == 0 || (ret) == DB_NOTFOUND)#define DB_RETOK_MPGET(ret) ((ret) == 0 || (ret) == DB_PAGE_NOTFOUND)#define DB_RETOK_REPPMSG(ret) ((ret) == 0 || (ret) == DB_REP_NEWMASTER || \ (ret) == DB_REP_NEWSITE)/******************************************************* * Files. *******************************************************/ /* * We use 1024 as the maximum path length. It's too hard to figure out what * the real path length is, as it was traditionally stored in <sys/param.h>, * and that file isn't always available. */#undef MAXPATHLEN#define MAXPATHLEN 1024#define PATH_DOT "." /* Current working directory. */#define PATH_SEPARATOR "/" /* Path separator character(s). *//* * Flags understood by __os_open. */#define DB_OSO_CREATE 0x0001 /* POSIX: O_CREAT */#define DB_OSO_DIRECT 0x0002 /* Don't buffer the file in the OS. */#define DB_OSO_EXCL 0x0004 /* POSIX: O_EXCL */#define DB_OSO_LOG 0x0008 /* Opening a log file. */#define DB_OSO_RDONLY 0x0010 /* POSIX: O_RDONLY */#define DB_OSO_REGION 0x0020 /* Opening a region file. */#define DB_OSO_SEQ 0x0040 /* Expected sequential access. */#define DB_OSO_TEMP 0x0080 /* Remove after last close. */#define DB_OSO_TRUNC 0x0100 /* POSIX: O_TRUNC *//* * Seek options understood by __os_seek. */typedef enum { DB_OS_SEEK_CUR, /* POSIX: SEEK_CUR */ DB_OS_SEEK_END, /* POSIX: SEEK_END */ DB_OS_SEEK_SET /* POSIX: SEEK_SET */} DB_OS_SEEK;/******************************************************* * Environment. *******************************************************//* Type passed to __db_appname(). */typedef enum { DB_APP_NONE=0, /* No type (region). */ DB_APP_DATA, /* Data file. */ DB_APP_LOG, /* Log file. */ DB_APP_TMP /* Temporary file. */} APPNAME;/* * CDB_LOCKING CDB product locking. * CRYPTO_ON Security has been configured. * LOCKING_ON Locking has been configured. * LOGGING_ON Logging has been configured. * MPOOL_ON Memory pool has been configured. * RPC_ON RPC has been configured. * TXN_ON Transactions have been configured. */#define CDB_LOCKING(dbenv) F_ISSET(dbenv, DB_ENV_CDB)#define CRYPTO_ON(dbenv) ((dbenv)->crypto_handle != NULL)#define LOCKING_ON(dbenv) ((dbenv)->lk_handle != NULL)#define LOGGING_ON(dbenv) ((dbenv)->lg_handle != NULL)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -