⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 db.h

📁 早期freebsd实现
💻 H
字号:
/*- * Copyright (c) 1990, 1993 *	The Regents of the University of California.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the University of *	California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * *	@(#)db.h	8.3 (Berkeley) 1/2/94 */#ifndef _DB_H_#define	_DB_H_#include <sys/types.h>#include <sys/cdefs.h>#include <limits.h>#define	RET_ERROR	-1		/* Return values. */#define	RET_SUCCESS	 0#define	RET_SPECIAL	 1#define	MAX_PAGE_NUMBER	ULONG_MAX	/* >= # of pages in a file */typedef u_long	pgno_t;#define	MAX_PAGE_OFFSET	USHRT_MAX	/* >= # of bytes in a page */typedef u_short	indx_t;#define	MAX_REC_NUMBER	ULONG_MAX	/* >= # of records in a tree */typedef u_long	recno_t;/* Key/data structure -- a Data-Base Thang. */typedef struct {	void	*data;			/* data */	size_t	 size;			/* data length */} DBT;/* Routine flags. */#define	R_CURSOR	1		/* del, put, seq */#define	__R_UNUSED	2		/* UNUSED */#define	R_FIRST		3		/* seq */#define	R_IAFTER	4		/* put (RECNO) */#define	R_IBEFORE	5		/* put (RECNO) */#define	R_LAST		6		/* seq (BTREE, RECNO) */#define	R_NEXT		7		/* seq */#define	R_NOOVERWRITE	8		/* put */#define	R_PREV		9		/* seq (BTREE, RECNO) */#define	R_SETCURSOR	10		/* put (RECNO) */#define	R_RECNOSYNC	11		/* sync (RECNO) */typedef enum { DB_BTREE, DB_HASH, DB_RECNO } DBTYPE;/* * !!! * The following flags are included in the dbopen(3) call as part of the * open(2) flags.  In order to avoid conflicts with the open flags, start * at the top of the 16 or 32-bit number space and work our way down.  If * the open flags were significantly expanded in the future, it could be * a problem.  Wish I'd left another flags word in the dbopen call. * * !!! * None of this stuff is implemented yet.  The only reason that it's here * is so that the access methods can skip copying the key/data pair when * the DB_LOCK flag isn't set. */#if UINT_MAX > 65535#define	DB_LOCK		0x20000000	/* Do locking. */#define	DB_SHMEM	0x40000000	/* Use shared memory. */#define	DB_TXN		0x80000000	/* Do transactions. */#else#define	DB_LOCK		0x00002000	/* Do locking. */#define	DB_SHMEM	0x00004000	/* Use shared memory. */#define	DB_TXN		0x00008000	/* Do transactions. */#endif/* Access method description structure. */typedef struct __db {	DBTYPE type;			/* Underlying db type. */	int (*close)	__P((struct __db *));	int (*del)	__P((const struct __db *, const DBT *, u_int));	int (*get)	__P((const struct __db *, const DBT *, DBT *, u_int));	int (*put)	__P((const struct __db *, DBT *, const DBT *, u_int));	int (*seq)	__P((const struct __db *, DBT *, DBT *, u_int));	int (*sync)	__P((const struct __db *, u_int));	void *internal;			/* Access method private. */	int (*fd)	__P((const struct __db *));} DB;#define	BTREEMAGIC	0x053162#define	BTREEVERSION	3/* Structure used to pass parameters to the btree routines. */typedef struct {#define	R_DUP		0x01	/* duplicate keys */	u_long	 flags;	int	 cachesize;	/* bytes to cache */	int	 maxkeypage;	/* maximum keys per page */	int	 minkeypage;	/* minimum keys per page */	int	 psize;		/* page size */				/* comparison, prefix functions */	int	 (*compare)	__P((const DBT *, const DBT *));	int	 (*prefix)	__P((const DBT *, const DBT *));	int	 lorder;	/* byte order */} BTREEINFO;#define	HASHMAGIC	0x061561#define	HASHVERSION	2/* Structure used to pass parameters to the hashing routines. */typedef struct {	int	 bsize;		/* bucket size */	int	 ffactor;	/* fill factor */	int	 nelem;		/* number of elements */	int	 cachesize;	/* bytes to cache */				/* hash function */	int	 (*hash) __P((const void *, size_t));	int	 lorder;	/* byte order */} HASHINFO;/* Structure used to pass parameters to the record routines. */typedef struct {#define	R_FIXEDLEN	0x01	/* fixed-length records */#define	R_NOKEY		0x02	/* key not required */#define	R_SNAPSHOT	0x04	/* snapshot the input */	u_long	 flags;	int	 cachesize;	/* bytes to cache */	int	 psize;		/* page size */	int	 lorder;	/* byte order */	size_t	 reclen;	/* record length (fixed-length records) */	u_char	 bval;		/* delimiting byte (variable-length records */	char	*bfname;	/* btree file name */ } RECNOINFO;/* * Little endian <==> big endian long swap macros. *	BLSWAP		swap a memory location *	BLPSWAP		swap a referenced memory location *	BLSWAP_COPY	swap from one location to another */#define BLSWAP(a) {							\	u_long _tmp = a;						\	((char *)&a)[0] = ((char *)&_tmp)[3];				\	((char *)&a)[1] = ((char *)&_tmp)[2];				\	((char *)&a)[2] = ((char *)&_tmp)[1];				\	((char *)&a)[3] = ((char *)&_tmp)[0];				\}#define	BLPSWAP(a) {							\	u_long _tmp = *(u_long *)a;					\	((char *)a)[0] = ((char *)&_tmp)[3];				\	((char *)a)[1] = ((char *)&_tmp)[2];				\	((char *)a)[2] = ((char *)&_tmp)[1];				\	((char *)a)[3] = ((char *)&_tmp)[0];				\}#define	BLSWAP_COPY(a, b) {						\	((char *)&(b))[0] = ((char *)&(a))[3];				\	((char *)&(b))[1] = ((char *)&(a))[2];				\	((char *)&(b))[2] = ((char *)&(a))[1];				\	((char *)&(b))[3] = ((char *)&(a))[0];				\}/* * Little endian <==> big endian short swap macros. *	BSSWAP		swap a memory location *	BSPSWAP		swap a referenced memory location *	BSSWAP_COPY	swap from one location to another */#define BSSWAP(a) {							\	u_short _tmp = a;						\	((char *)&a)[0] = ((char *)&_tmp)[1];				\	((char *)&a)[1] = ((char *)&_tmp)[0];				\}#define BSPSWAP(a) {							\	u_short _tmp = *(u_short *)a;					\	((char *)a)[0] = ((char *)&_tmp)[1];				\	((char *)a)[1] = ((char *)&_tmp)[0];				\}#define BSSWAP_COPY(a, b) {						\	((char *)&(b))[0] = ((char *)&(a))[1];				\	((char *)&(b))[1] = ((char *)&(a))[0];				\}__BEGIN_DECLSDB *dbopen __P((const char *, int, int, DBTYPE, const void *));#ifdef __DBINTERFACE_PRIVATEDB	*__bt_open __P((const char *, int, int, const BTREEINFO *, int));DB	*__hash_open __P((const char *, int, int, const HASHINFO *, int));DB	*__rec_open __P((const char *, int, int, const RECNOINFO *, int));void	 __dbpanic __P((DB *dbp));#endif__END_DECLS#endif /* !_DB_H_ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -