#include <stdio.h>
#include "extra.h"
Go to the source code of this file.
Data Structures | |
struct | Hash_Flt_Entry_t_ |
struct | Hash_Flt_t_ |
Defines | |
#define | Hash_FltForEachEntry(pHash, pEntry, bin) |
Typedefs | |
typedef struct Hash_Flt_t_ | Hash_Flt_t |
typedef struct Hash_Flt_Entry_t_ | Hash_Flt_Entry_t |
Functions | |
int | Hash_DefaultHashFunc (int key, int nBins) |
static Hash_Flt_t * | Hash_FltAlloc (int nBins) |
static int | Hash_FltExists (Hash_Flt_t *p, int key) |
static void | Hash_FltWriteEntry (Hash_Flt_t *p, int key, float data) |
static float | Hash_FltEntry (Hash_Flt_t *p, int key, int fCreate) |
static float * | Hash_FltEntryPtr (Hash_Flt_t *p, int key) |
static void | Hash_FltRemove (Hash_Flt_t *p, int key) |
static void | Hash_FltFree (Hash_Flt_t *p) |
#define Hash_FltForEachEntry | ( | pHash, | |||
pEntry, | |||||
bin | ) |
typedef struct Hash_Flt_Entry_t_ Hash_Flt_Entry_t |
typedef struct Hash_Flt_t_ Hash_Flt_t |
int Hash_DefaultHashFunc | ( | int | key, | |
int | nBins | |||
) |
CFile****************************************************************
FileName [hashFlt.h]
SystemName [ABC: Logic synthesis and verification system.]
PackageName [Hash maps.]
Synopsis [Hash maps.]
Author [Aaron P. Hurst]
Affiliation [UC Berkeley]
Date [Ver. 1.0. Started - May 16, 2006.]
Revision [
] INCLUDES ///
CFile****************************************************************
FileName [hash.h]
SystemName [ABC: Logic synthesis and verification system.]
PackageName [Hash map.]
Synopsis [External declarations.]
Author [Aaron P. Hurst]
Affiliation [UC Berkeley]
Date [Ver. 1.0. Started - May 16, 2005.]
Revision [
] INCLUDES /// PARAMETERS /// BASIC TYPES /// MACRO DEFINITIONS /// FUNCTION DECLARATIONS ///
static Hash_Flt_t* Hash_FltAlloc | ( | int | nBins | ) | [inline, static] |
FUNCTION DEFINITIONS ///Function*************************************************************
Synopsis [Allocates a hash map with the given number of bins.]
Description []
SideEffects []
SeeAlso []
Definition at line 84 of file hashFlt.h.
00085 { 00086 Hash_Flt_t * p; 00087 int i; 00088 assert(nBins > 0); 00089 p = ALLOC( Hash_Flt_t, 1); 00090 p->nBins = nBins; 00091 p->fHash = Hash_DefaultHashFunc; 00092 p->nSize = 0; 00093 p->pArray = ALLOC( Hash_Flt_Entry_t *, nBins ); 00094 for(i=0; i<nBins; i++) 00095 p->pArray[i] = NULL; 00096 00097 return p; 00098 }
static float Hash_FltEntry | ( | Hash_Flt_t * | p, | |
int | key, | |||
int | fCreate | |||
) | [inline, static] |
Function*************************************************************
Synopsis [Finds or creates an entry with a key.]
Description [fCreate specifies whether new entries should be created.]
SideEffects []
SeeAlso []
Definition at line 187 of file hashFlt.h.
00188 { 00189 int bin; 00190 Hash_Flt_Entry_t *pEntry, **pLast; 00191 00192 // find the bin where this key would live 00193 bin = (*(p->fHash))(key, p->nBins); 00194 00195 // search for key 00196 pLast = &(p->pArray[bin]); 00197 pEntry = p->pArray[bin]; 00198 while(pEntry) { 00199 if (pEntry->key == key) 00200 return pEntry->data; 00201 pLast = &(pEntry->pNext); 00202 pEntry = pEntry->pNext; 00203 } 00204 00205 // this key does not currently exist 00206 if (fCreate) { 00207 // create a new entry and add to bin 00208 p->nSize++; 00209 (*pLast) = pEntry = ALLOC( Hash_Flt_Entry_t, 1 ); 00210 pEntry->pNext = NULL; 00211 pEntry->key = key; 00212 pEntry->data = 0.0; 00213 return pEntry->data; 00214 } 00215 00216 return 0.0; 00217 }
static float* Hash_FltEntryPtr | ( | Hash_Flt_t * | p, | |
int | key | |||
) | [inline, static] |
Function*************************************************************
Synopsis [Finds or creates an entry with a key and returns the pointer to it.]
Description []
SideEffects []
SeeAlso []
Definition at line 231 of file hashFlt.h.
00232 { 00233 int bin; 00234 Hash_Flt_Entry_t *pEntry, **pLast; 00235 00236 // find the bin where this key would live 00237 bin = (*(p->fHash))(key, p->nBins); 00238 00239 // search for key 00240 pLast = &(p->pArray[bin]); 00241 pEntry = p->pArray[bin]; 00242 while(pEntry) { 00243 if (pEntry->key == key) 00244 return &(pEntry->data); 00245 pLast = &(pEntry->pNext); 00246 pEntry = pEntry->pNext; 00247 } 00248 00249 // this key does not currently exist 00250 // create a new entry and add to bin 00251 p->nSize++; 00252 (*pLast) = pEntry = ALLOC( Hash_Flt_Entry_t, 1 ); 00253 pEntry->pNext = NULL; 00254 pEntry->key = key; 00255 pEntry->data = 0.0; 00256 00257 return &(pEntry->data); 00258 }
static int Hash_FltExists | ( | Hash_Flt_t * | p, | |
int | key | |||
) | [inline, static] |
Function*************************************************************
Synopsis [Returns 1 if a key already exists.]
Description []
SideEffects []
SeeAlso []
Definition at line 111 of file hashFlt.h.
00112 { 00113 int bin; 00114 Hash_Flt_Entry_t *pEntry, **pLast; 00115 00116 // find the bin where this key would live 00117 bin = (*(p->fHash))(key, p->nBins); 00118 00119 // search for key 00120 pLast = &(p->pArray[bin]); 00121 pEntry = p->pArray[bin]; 00122 while(pEntry) { 00123 if (pEntry->key == key) { 00124 return 1; 00125 } 00126 pLast = &(pEntry->pNext); 00127 pEntry = pEntry->pNext; 00128 } 00129 00130 return 0; 00131 }
static void Hash_FltFree | ( | Hash_Flt_t * | p | ) | [inline, static] |
Function*************************************************************
Synopsis [Frees the hash.]
Description []
SideEffects []
SeeAlso []
Definition at line 308 of file hashFlt.h.
00308 { 00309 int bin; 00310 Hash_Flt_Entry_t *pEntry; 00311 00312 // free bins 00313 for(bin = 0; bin < p->nBins; bin++) { 00314 pEntry = p->pArray[bin]; 00315 while(pEntry) { 00316 pEntry = pEntry->pNext; 00317 FREE( pEntry ); 00318 } 00319 } 00320 00321 // free hash 00322 FREE( p->pArray ); 00323 FREE( p ); 00324 }
static void Hash_FltRemove | ( | Hash_Flt_t * | p, | |
int | key | |||
) | [inline, static] |
Function*************************************************************
Synopsis [Deletes an entry.]
Description []
SideEffects []
SeeAlso []
Definition at line 271 of file hashFlt.h.
00272 { 00273 int bin; 00274 Hash_Flt_Entry_t *pEntry, **pLast; 00275 00276 // find the bin where this key would live 00277 bin = (*(p->fHash))(key, p->nBins); 00278 00279 // search for key 00280 pLast = &(p->pArray[bin]); 00281 pEntry = p->pArray[bin]; 00282 while(pEntry) { 00283 if (pEntry->key == key) { 00284 p->nSize--; 00285 *pLast = pEntry->pNext; 00286 FREE( pEntry ); 00287 return; 00288 } 00289 pLast = &(pEntry->pNext); 00290 pEntry = pEntry->pNext; 00291 } 00292 00293 // could not find key 00294 return; 00295 }
static void Hash_FltWriteEntry | ( | Hash_Flt_t * | p, | |
int | key, | |||
float | data | |||
) | [inline, static] |
Function*************************************************************
Synopsis [Finds or creates an entry with a key and writes value.]
Description []
SideEffects []
SeeAlso []
Definition at line 144 of file hashFlt.h.
00145 { 00146 int bin; 00147 Hash_Flt_Entry_t *pEntry, **pLast; 00148 00149 // find the bin where this key would live 00150 bin = (*(p->fHash))(key, p->nBins); 00151 00152 // search for key 00153 pLast = &(p->pArray[bin]); 00154 pEntry = p->pArray[bin]; 00155 while(pEntry) { 00156 if (pEntry->key == key) { 00157 pEntry->data = data; 00158 return; 00159 } 00160 pLast = &(pEntry->pNext); 00161 pEntry = pEntry->pNext; 00162 } 00163 00164 // this key does not currently exist 00165 // create a new entry and add to bin 00166 p->nSize++; 00167 (*pLast) = pEntry = ALLOC( Hash_Flt_Entry_t, 1 ); 00168 pEntry->pNext = NULL; 00169 pEntry->key = key; 00170 pEntry->data = data; 00171 00172 return; 00173 }