97 lines
2.7 KiB
C
97 lines
2.7 KiB
C
/* hashLib.h - hash table library header */
|
|
|
|
/* Copyright 1984-2003 Wind River Systems, Inc. */
|
|
|
|
/*
|
|
modification history
|
|
--------------------
|
|
01j,26jun03,to merged from AE1.1: de-classified,
|
|
moved private definitions to private/hashLibP.h.
|
|
01i,23oct01,rae undo 01h
|
|
01h,10oct01,rae merge from truestack ver 01i base 01g
|
|
01g,22sep92,rrr added support for c++
|
|
01f,04jul92,jcf cleaned up.
|
|
01e,26may92,rrr the tree shuffle
|
|
01d,04oct91,rrr passed through the ansification filter
|
|
-changed copyright notice
|
|
01c,05oct90,shl added ANSI function prototypes.
|
|
made #endif ANSI style.
|
|
added copyright notice.
|
|
01b,26jun90,jcf remove hash id error status.
|
|
01a,17nov89,jcf written.
|
|
*/
|
|
|
|
#ifndef __INChashLibh
|
|
#define __INChashLibh
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include "vwModNum.h"
|
|
#include "sllLib.h"
|
|
|
|
|
|
/* status codes */
|
|
|
|
#define S_hashLib_KEY_CLASH (M_hashLib | 1)
|
|
|
|
|
|
/* type definitions */
|
|
|
|
typedef SL_NODE HASH_NODE; /* HASH_NODE */
|
|
|
|
typedef struct hashtbl * HASH_ID;
|
|
|
|
|
|
/* These hash nodes are used by the hashing functions in hashLib(1) */
|
|
|
|
typedef struct /* H_NODE_INT */
|
|
{
|
|
HASH_NODE node; /* linked list node (must be first) */
|
|
int key; /* hash node key */
|
|
int data; /* hash node data */
|
|
} H_NODE_INT;
|
|
|
|
typedef struct /* H_NODE_STRING */
|
|
{
|
|
HASH_NODE node; /* linked list node (must be first) */
|
|
char * string; /* hash node key */
|
|
int data; /* hash node data */
|
|
} H_NODE_STRING;
|
|
|
|
|
|
/* function declarations */
|
|
|
|
extern BOOL hashKeyCmp (H_NODE_INT * pMatchHNode,
|
|
H_NODE_INT * pHNode, int keyCmpArg);
|
|
extern BOOL hashKeyStrCmp (H_NODE_STRING * pMatchHNode,
|
|
H_NODE_STRING * pHNode, int keyCmpArg);
|
|
extern HASH_ID hashTblCreate (int sizeLog2, FUNCPTR keyCmpRtn,
|
|
FUNCPTR keyRtn, int keyArg);
|
|
extern HASH_NODE * hashTblEach (HASH_ID hashId, FUNCPTR routine,
|
|
int routineArg);
|
|
extern HASH_NODE * hashTblFind (HASH_ID hashId, HASH_NODE * pMatchNode,
|
|
int keyCmpArg);
|
|
extern STATUS hashLibInit (void);
|
|
extern STATUS hashTblDelete (HASH_ID hashId);
|
|
extern STATUS hashTblDestroy (HASH_ID hashId, BOOL dealloc);
|
|
extern STATUS hashTblInit (HASH_ID pHashTbl, SL_LIST * pTblMem,
|
|
int sizeLog2, FUNCPTR keyCmpRtn,
|
|
FUNCPTR keyRtn, int keyArg);
|
|
extern STATUS hashTblPut (HASH_ID hashId, HASH_NODE * pHashNode);
|
|
extern STATUS hashTblRemove (HASH_ID hashId, HASH_NODE * pHashNode);
|
|
extern STATUS hashTblTerminate (HASH_ID hashId);
|
|
extern int hashFuncIterScale (int elements, H_NODE_STRING * pHNode,
|
|
int seed);
|
|
extern int hashFuncModulo (int elements, H_NODE_INT * pHNode,
|
|
int divisor);
|
|
extern int hashFuncMultiply (int elements, H_NODE_INT * pHNode,
|
|
int multiplier);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __INChashLibh */
|