mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 2b0fe8070b
			
		
	
	
		2b0fe8070b
		
	
	
	
	
		
			
			[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_ */
 |