4.4BSD/usr/src/contrib/mkmf/src/hash.h

Compare this file to the similar file:
Show the results in this format:

/*
 * Copyright (c) 1983, 1985, 1991 Peter J. Nicklin.
 * Copyright (c) 1991 Version Technology.
 * All Rights Reserved.
 *
 * $License: VT.1.1 $
 * 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
 * Version Technology.''  Neither the name of Version  Technology  nor
 * the  name  of  Peter J. Nicklin  may  be used to endorse or promote
 * products derived from this software without specific prior  written
 * permission.
 *
 * THIS SOFTWARE IS PROVIDED BY VERSION TECHNOLOGY ``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  VERSION  TECHNOLOGY  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.
 *
 * Report problems and direct questions to nicklin@netcom.com
 *
 * $Header: hash.h,v 4.3 91/11/25 19:45:47 nicklin Exp $
 *
 * Hash table definitions
 *
 * Author: Peter J. Nicklin
 */

/*
 * Singly-linked list block containing a pointer to a hash table
 * block for an include file
 */
typedef struct _iblk
	{
	int i_loop;
	struct _hblk *i_hblk;
	struct _iblk *i_next;
	} INCBLK;
/*
 * Hash table block
 */
typedef struct _hblk
	{
	char *h_key;			/* points to key */
	char *h_def;			/* points to definition string */
	int h_val;			/* integer value */
	struct _iblk *h_sub;		/* ptr to include subchain */
	struct _hblk *h_tag;		/* ptr to auxiliary tag chain */
	struct _hblk *h_next;		/* ptr to next block */
	} HASHBLK;
/*
 * Hash pointer table struct
 */
typedef struct _hash
	{
	HASHBLK **hashtab;		/* hash pointer table */
	HASHBLK *thisblk;		/* current hash table block */
	int headblk;			/* index of head of block chain */
	int hashsiz;			/* hash table size */
	int nk;				/* number of keys in table */
	} HASH;
/*
 * Functions defined for hash tables
 */
#define htnum(ht) ((ht)->nk)		/* return number of keys in table */
#define htkey(ht) ((ht)->thisblk->h_key)/* return key from current block */
#define htdef(ht) ((ht)->thisblk->h_def)/* return definition from current block */
#define htval(ht) ((ht)->thisblk->h_val)/* return value from current block */
extern HASHBLK *htbrm();		/* remove hash table block */
extern int hthash();			/* compute hash value */
extern int htnext();			/* set hash table ptr to next block */
extern HASH *htinit();			/* initialize hash table */
extern HASHBLK *htinstall();		/* install hash table entry */
extern HASHBLK *htlookup();		/* find hash table entry */
extern void htrewind();			/* rewind hash table to first block */
extern void htrm();			/* remove hash table entry */