mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	[ruby-core:23039] * ext/sdbm/depend: objects depend on sdbm.h. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27730 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			86 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * sdbm - ndbm work-alike hashed database library
 | 
						|
 * based on Per-Ake Larson's Dynamic Hashing algorithms. BIT 18 (1978).
 | 
						|
 * author: oz@nexus.yorku.ca
 | 
						|
 * status: public domain.
 | 
						|
 */
 | 
						|
#ifndef	_SDBM_H_
 | 
						|
#define	_SDBM_H_
 | 
						|
 | 
						|
#include <stdio.h>
 | 
						|
 | 
						|
#define DBLKSIZ 4096
 | 
						|
#define PBLKSIZ 1024
 | 
						|
#define PAIRMAX 1008			/* arbitrary on PBLKSIZ-N */
 | 
						|
#define SPLTMAX	10			/* maximum allowed splits */
 | 
						|
					/* for a single insertion */
 | 
						|
#define DIRFEXT	".dir"
 | 
						|
#define PAGFEXT	".pag"
 | 
						|
 | 
						|
typedef struct {
 | 
						|
	int dirf;		       /* directory file descriptor */
 | 
						|
	int pagf;		       /* page file descriptor */
 | 
						|
	int flags;		       /* status/error flags, see below */
 | 
						|
	int keyptr;		       /* current key for nextkey */
 | 
						|
	off_t maxbno;		       /* size of dirfile in bits */
 | 
						|
	long curbit;		       /* current bit number */
 | 
						|
	long hmask;		       /* current hash mask */
 | 
						|
	long blkptr;		       /* current block for nextkey */
 | 
						|
	long blkno;		       /* current page to read/write */
 | 
						|
	long pagbno;		       /* current page in pagbuf */
 | 
						|
	char pagbuf[PBLKSIZ];	       /* page file block buffer */
 | 
						|
	long dirbno;		       /* current block in dirbuf */
 | 
						|
	char dirbuf[DBLKSIZ];	       /* directory file block buffer */
 | 
						|
} DBM;
 | 
						|
 | 
						|
#define DBM_RDONLY	0x1	       /* data base open read-only */
 | 
						|
#define DBM_IOERR	0x2	       /* data base I/O error */
 | 
						|
 | 
						|
/*
 | 
						|
 * utility macros
 | 
						|
 */
 | 
						|
#define sdbm_rdonly(db)		((db)->flags & DBM_RDONLY)
 | 
						|
#define sdbm_error(db)		((db)->flags & DBM_IOERR)
 | 
						|
 | 
						|
#define sdbm_clearerr(db)	((db)->flags &= ~DBM_IOERR)  /* ouch */
 | 
						|
 | 
						|
#define sdbm_dirfno(db)	((db)->dirf)
 | 
						|
#define sdbm_pagfno(db)	((db)->pagf)
 | 
						|
 | 
						|
typedef struct {
 | 
						|
	char *dptr;
 | 
						|
	int dsize;
 | 
						|
} datum;
 | 
						|
 | 
						|
extern datum nullitem;
 | 
						|
 | 
						|
#if defined(__STDC__)
 | 
						|
#define proto(p) p
 | 
						|
#else
 | 
						|
#define proto(p) ()
 | 
						|
#endif
 | 
						|
 | 
						|
/*
 | 
						|
 * flags to sdbm_store
 | 
						|
 */
 | 
						|
#define DBM_INSERT	0
 | 
						|
#define DBM_REPLACE	1
 | 
						|
 | 
						|
/*
 | 
						|
 * ndbm interface
 | 
						|
 */
 | 
						|
extern DBM *sdbm_open proto((char *, int, int));
 | 
						|
extern void sdbm_close proto((DBM *));
 | 
						|
extern datum sdbm_fetch proto((DBM *, datum));
 | 
						|
extern int sdbm_delete proto((DBM *, datum));
 | 
						|
extern int sdbm_store proto((DBM *, datum, datum, int));
 | 
						|
extern datum sdbm_firstkey proto((DBM *));
 | 
						|
extern datum sdbm_nextkey proto((DBM *));
 | 
						|
 | 
						|
/*
 | 
						|
 * other
 | 
						|
 */
 | 
						|
extern DBM *sdbm_prep proto((char *, char *, int, int));
 | 
						|
extern long sdbm_hash proto((char *, int));
 | 
						|
 | 
						|
#endif	/* _SDBM_H_ */
 |