/*
 * This file is part of the UCB release of Plan 9. It is subject to the license
 * terms in the LICENSE file found in the top-level directory of this
 * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
 * part of the UCB release of Plan 9, including this file, may be copied,
 * modified, propagated, or distributed except according to the terms contained
 * in the LICENSE file.
 */
/* a hash file */

#pragma once

__BEGIN_DECLS

struct ndbhf
{
	struct ndbhf	*next;

	int		fd;
	uint32_t	dbmtime;	/* mtime of data base */
	int		hlen;		/* length (in entries) of hash table */
	char		attr[Ndbalen];	/* attribute hashed */

	uint8_t		buf[256];	/* hash file buffer */
	long		off;		/* offset of first byte of buffer */
	int		len;		/* length of valid data in buffer */
};

char *_ndbparsetuple(char*, struct ndbtuple**);
struct ndbtuple *_ndbparseline(char*);

#define ISWHITE(x) ((x) == ' ' || (x) == '\t' || (x) == '\r')
#define EATWHITE(x) while(ISWHITE(*(x)))(x)++

extern struct ndbtuple *_ndbtfree;

/* caches */
void _ndbcacheflush(struct ndb *db);
int _ndbcachesearch(struct ndb *db, struct ndbs *s, char *attr, char *val,
			   struct ndbtuple **t);
struct ndbtuple* _ndbcacheadd(struct ndb *db, struct ndbs *s, char *attr,
			      char *val, struct ndbtuple *t);

__END_DECLS
