Files
seta75D d6fe8fe829 Init
2021-10-11 22:19:34 -03:00

160 lines
5.1 KiB
C

/* @(#)39 1.3 src/bldenv/make/hash.h, bldprocess, bos412, GOLDA411a 1/19/94 16:27:31
*
* COMPONENT_NAME: BLDPROCESS
*
* FUNCTIONS: Hash_GetValue
* Hash_SetValue
*
* ORIGINS: 27,71
*
* This module contains IBM CONFIDENTIAL code. -- (IBM
* Confidential Restricted when combined with the aggregated
* modules for this product)
* SOURCE MATERIALS
*
* (C) COPYRIGHT International Business Machines Corp. 1994
* All Rights Reserved
* US Government Users Restricted Rights - Use, duplication or
* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
*/
/*
* @OSF_FREE_COPYRIGHT@
* COPYRIGHT NOTICE
* Copyright (c) 1992, 1991, 1990
* Open Software Foundation, Inc.
*
* Permission is hereby granted to use, copy, modify and freely distribute
* the software in this file and its documentation for any purpose without
* fee, provided that the above copyright notice appears in all copies and
* that both the copyright notice and this permission notice appear in
* supporting documentation. Further, provided that the name of Open
* Software Foundation, Inc. ("OSF") not be used in advertising or
* publicity pertaining to distribution of the software without prior
* written permission from OSF. OSF makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
/*
* HISTORY
* $Log: hash.h,v $
* Revision 1.2.2.3 1992/12/03 19:05:26 damon
* ODE 2.2 CR 346. Expanded copyright
* [1992/12/03 18:35:15 damon]
*
* Revision 1.2.2.2 1992/09/24 19:24:10 gm
* CR286: Major improvements to make internals.
* [1992/09/24 17:54:13 gm]
*
* Revision 1.2 1991/12/05 20:42:45 devrcs
* Changes for Reno make
* [91/03/22 16:00:27 mckeen]
*
* $EndLog$
*/
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
* Copyright (c) 1988, 1989 by Adam de Boor
* Copyright (c) 1989 by Berkeley Softworks
* All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Adam de Boor.
*
* Redistribution and use in source and binary forms are permitted provided
* that: (1) source distributions retain this entire copyright notice and
* comment, and (2) distributions including binaries display the following
* acknowledgement: ``This product includes software developed by the
* University of California, Berkeley and its contributors'' in the
* documentation or other materials provided with the distribution and in
* all advertising materials mentioning features or use of this software.
* 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* @(#)hash.h 5.4 (Berkeley) 12/28/90
*/
/* hash.h --
*
* This file contains definitions used by the hash module,
* which maintains hash tables.
*/
#ifndef _HASH
#define _HASH
#include "sprite.h"
#include "str.h"
/*
* The following defines one entry in the hash table.
*/
typedef struct Hash_Entry {
struct Hash_Entry *next; /* Used to link together all the
* entries associated with the same
* bucket. */
ClientData clientData; /* Arbitrary piece of data associated
* with key. */
string_t name; /* key string */
} Hash_Entry;
typedef struct Hash_Table {
struct Hash_Entry **bucketPtr;/* Pointers to Hash_Entry, one
* for each bucket in the table. */
int size; /* Actual size of array. */
int numEntries; /* Number of entries in the table. */
int mask; /* Used to select bits for hashing. */
} Hash_Table;
/*
* The following structure is used by the searching routines
* to record where we are in the search.
*/
typedef struct Hash_Search {
Hash_Table *tablePtr; /* Table being searched. */
int nextIndex; /* Next bucket to check (after current). */
Hash_Entry *hashEntryPtr; /* Next entry to check in current bucket. */
} Hash_Search;
/*
* Macros.
*/
/*
* ClientData Hash_GetValue(h)
* Hash_Entry *h;
*/
#define Hash_GetValue(h) ((h)->clientData)
/*
* Hash_SetValue(h, val);
* Hash_Entry *h;
* char *val;
*/
#define Hash_SetValue(h, val) ((h)->clientData = (ClientData) (val))
/*
* The following procedure declarations and macros
* are the only things that should be needed outside
* the implementation code.
*/
extern Hash_Entry * Hash_CreateEntry(Hash_Table *, string_t, Boolean *);
extern void Hash_CreateString(Hash_Table *, string_t);
extern void Hash_DeleteEntry(Hash_Table *, Hash_Entry *);
extern void Hash_DeleteTable(Hash_Table *);
extern Hash_Entry * Hash_EnumFirst(Hash_Table *, Hash_Search *);
extern Hash_Entry * Hash_EnumNext(Hash_Search *);
extern Hash_Entry * Hash_FindEntry(Hash_Table *, string_t);
extern string_t Hash_FindString(Hash_Table *, string_t);
extern void Hash_InitTable(Hash_Table *, int);
#endif /* _HASH */