abc-master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
hashInt.h File Reference
#include <stdio.h>
#include "misc/extra/extra.h"

Go to the source code of this file.

Data Structures

struct  Hash_Int_Entry_t_
 
struct  Hash_Int_t_
 

Macros

#define Hash_IntForEachEntry(pHash, pEntry, bin)
 MACRO DEFINITIONS ///. More...
 

Typedefs

typedef struct Hash_Int_t_ Hash_Int_t
 PARAMETERS ///. More...
 
typedef struct Hash_Int_Entry_t_ Hash_Int_Entry_t
 

Functions

ABC_NAMESPACE_HEADER_START int Hash_DefaultHashFunc (int key, int nBins)
 INCLUDES ///. More...
 
static Hash_Int_tHash_IntAlloc (int nBins)
 FUNCTION DEFINITIONS ///. More...
 
static int Hash_IntExists (Hash_Int_t *p, int key)
 
static void Hash_IntWriteEntry (Hash_Int_t *p, int key, int data)
 
static int Hash_IntEntry (Hash_Int_t *p, int key, int fCreate)
 
static int * Hash_IntEntryPtr (Hash_Int_t *p, int key)
 
static void Hash_IntFree (Hash_Int_t *p)
 

Macro Definition Documentation

#define Hash_IntForEachEntry (   pHash,
  pEntry,
  bin 
)
Value:
for(bin=-1, pEntry=NULL; bin < pHash->nBins; (!pEntry)?(pEntry=pHash->pArray[++bin]):(pEntry=pEntry->pNext)) \
if (pEntry)
if(last==0)
Definition: sparse_int.h:34

MACRO DEFINITIONS ///.

Definition at line 69 of file hashInt.h.

Typedef Documentation

Definition at line 46 of file hashInt.h.

typedef struct Hash_Int_t_ Hash_Int_t

PARAMETERS ///.

BASIC TYPES ///

Definition at line 45 of file hashInt.h.

Function Documentation

ABC_NAMESPACE_HEADER_START int Hash_DefaultHashFunc ( int  key,
int  nBins 
)

INCLUDES ///.

CFile****************************************************************

FileName [hashInt.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 [

Id:
vecInt.h,v 1.00 2005/06/20 00:00:00 ahurst Exp

]

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 [

Id:
vec.h,v 1.00 2005/06/20 00:00:00 ahurst Exp

]PARAMETERS ///BASIC TYPES ///MACRO DEFINITIONS ///FUNCTION DECLARATIONS ///

Definition at line 57 of file hash.h.

57  {
58  return Abc_AbsInt( ( (key+11)*(key)*7+3 ) % nBins );
59 }
static int Abc_AbsInt(int a)
Definition: abc_global.h:237
enum keys key
static Hash_Int_t* Hash_IntAlloc ( int  nBins)
inlinestatic

FUNCTION DEFINITIONS ///.

Function*************************************************************

Synopsis [Allocates a hash map with the given number of bins.]

Description []

SideEffects []

SeeAlso []

Definition at line 88 of file hashInt.h.

89 {
90  Hash_Int_t * p;
91  int i;
92  assert(nBins > 0);
93  p = ABC_ALLOC( Hash_Int_t, 1);
94  p->nBins = nBins;
96  p->nSize = 0;
97  p->pArray = ABC_ALLOC( Hash_Int_Entry_t *, nBins+1 );
98  for(i=0; i<nBins; i++)
99  p->pArray[i] = NULL;
100 
101  return p;
102 }
Definition: hashInt.h:48
int nSize
Definition: hashInt.h:57
static Llb_Mgr_t * p
Definition: llb3Image.c:950
int nBins
Definition: hashInt.h:58
#define ABC_ALLOC(type, num)
Definition: abc_global.h:229
Hash_Int_Entry_t ** pArray
Definition: hashInt.h:60
int(* fHash)(int key, int nBins)
Definition: hashInt.h:59
ABC_NAMESPACE_HEADER_START int Hash_DefaultHashFunc(int key, int nBins)
INCLUDES ///.
Definition: hash.h:57
#define assert(ex)
Definition: util_old.h:213
static int Hash_IntEntry ( Hash_Int_t p,
int  key,
int  fCreate 
)
inlinestatic

Function*************************************************************

Synopsis [Finds or creates an entry with a key.]

Description [fCreate specifies whether new entries will be created.]

SideEffects []

SeeAlso []

Definition at line 191 of file hashInt.h.

192 {
193  int bin;
194  Hash_Int_Entry_t *pEntry, **pLast;
195 
196  // find the bin where this key would live
197  bin = (*(p->fHash))(key, p->nBins);
198 
199  // search for key
200  pLast = &(p->pArray[bin]);
201  pEntry = p->pArray[bin];
202  while(pEntry) {
203  if (pEntry->key == key)
204  return pEntry->data;
205  pLast = &(pEntry->pNext);
206  pEntry = pEntry->pNext;
207  }
208 
209  // this key does not currently exist
210  if (fCreate) {
211  // create a new entry and add to bin
212  p->nSize++;
213  (*pLast) = pEntry = ABC_ALLOC( Hash_Int_Entry_t, 1 );
214  pEntry->pNext = NULL;
215  pEntry->key = key;
216  pEntry->data = 0;
217  return pEntry->data;
218  }
219 
220  return 0;
221 }
Definition: hashInt.h:48
struct Hash_Int_Entry_t_ * pNext
Definition: hashInt.h:52
int nSize
Definition: hashInt.h:57
int nBins
Definition: hashInt.h:58
#define ABC_ALLOC(type, num)
Definition: abc_global.h:229
Hash_Int_Entry_t ** pArray
Definition: hashInt.h:60
int(* fHash)(int key, int nBins)
Definition: hashInt.h:59
int key
Definition: hashInt.h:50
enum keys key
int data
Definition: hashInt.h:51
static int* Hash_IntEntryPtr ( Hash_Int_t p,
int  key 
)
inlinestatic

Function*************************************************************

Synopsis [Finds or creates an entry with a key and returns the pointer to it.]

Description []

SideEffects []

SeeAlso []

Definition at line 235 of file hashInt.h.

236 {
237  int bin;
238  Hash_Int_Entry_t *pEntry, **pLast;
239 
240  // find the bin where this key would live
241  bin = (*(p->fHash))(key, p->nBins);
242 
243  // search for key
244  pLast = &(p->pArray[bin]);
245  pEntry = p->pArray[bin];
246  while(pEntry) {
247  if (pEntry->key == key)
248  return &(pEntry->data);
249  pLast = &(pEntry->pNext);
250  pEntry = pEntry->pNext;
251  }
252 
253  // this key does not currently exist
254  // create a new entry and add to bin
255  p->nSize++;
256  (*pLast) = pEntry = ABC_ALLOC( Hash_Int_Entry_t, 1 );
257  pEntry->pNext = NULL;
258  pEntry->key = key;
259  pEntry->data = 0;
260 
261  return &(pEntry->data);
262 }
Definition: hashInt.h:48
struct Hash_Int_Entry_t_ * pNext
Definition: hashInt.h:52
int nSize
Definition: hashInt.h:57
int nBins
Definition: hashInt.h:58
#define ABC_ALLOC(type, num)
Definition: abc_global.h:229
Hash_Int_Entry_t ** pArray
Definition: hashInt.h:60
int(* fHash)(int key, int nBins)
Definition: hashInt.h:59
int key
Definition: hashInt.h:50
enum keys key
int data
Definition: hashInt.h:51
static int Hash_IntExists ( Hash_Int_t p,
int  key 
)
inlinestatic

Function*************************************************************

Synopsis [Returns 1 if a key already exists.]

Description []

SideEffects []

SeeAlso []

Definition at line 115 of file hashInt.h.

116 {
117  int bin;
118  Hash_Int_Entry_t *pEntry, **pLast;
119 
120  // find the bin where this key would live
121  bin = (*(p->fHash))(key, p->nBins);
122 
123  // search for key
124  pLast = &(p->pArray[bin]);
125  pEntry = p->pArray[bin];
126  while(pEntry) {
127  if (pEntry->key == key) {
128  return 1;
129  }
130  pLast = &(pEntry->pNext);
131  pEntry = pEntry->pNext;
132  }
133 
134  return 0;
135 }
Definition: hashInt.h:48
struct Hash_Int_Entry_t_ * pNext
Definition: hashInt.h:52
int nBins
Definition: hashInt.h:58
Hash_Int_Entry_t ** pArray
Definition: hashInt.h:60
int(* fHash)(int key, int nBins)
Definition: hashInt.h:59
int key
Definition: hashInt.h:50
enum keys key
static void Hash_IntFree ( Hash_Int_t p)
inlinestatic

Function*************************************************************

Synopsis [Frees the hash.]

Description []

SideEffects []

SeeAlso []

Definition at line 275 of file hashInt.h.

275  {
276  int bin;
277  Hash_Int_Entry_t *pEntry, *pTemp;
278 
279  // free bins
280  for(bin = 0; bin < p->nBins; bin++) {
281  pEntry = p->pArray[bin];
282  while(pEntry) {
283  pTemp = pEntry;
284  pEntry = pEntry->pNext;
285  ABC_FREE( pTemp );
286  }
287  }
288 
289  // free hash
290  ABC_FREE( p->pArray );
291  ABC_FREE( p );
292 }
Definition: hashInt.h:48
struct Hash_Int_Entry_t_ * pNext
Definition: hashInt.h:52
int nBins
Definition: hashInt.h:58
Hash_Int_Entry_t ** pArray
Definition: hashInt.h:60
#define ABC_FREE(obj)
Definition: abc_global.h:232
static void Hash_IntWriteEntry ( Hash_Int_t p,
int  key,
int  data 
)
inlinestatic

Function*************************************************************

Synopsis [Finds or creates an entry with a key and writes value.]

Description []

SideEffects []

SeeAlso []

Definition at line 148 of file hashInt.h.

149 {
150  int bin;
151  Hash_Int_Entry_t *pEntry, **pLast;
152 
153  // find the bin where this key would live
154  bin = (*(p->fHash))(key, p->nBins);
155 
156  // search for key
157  pLast = &(p->pArray[bin]);
158  pEntry = p->pArray[bin];
159  while(pEntry) {
160  if (pEntry->key == key) {
161  pEntry->data = data;
162  return;
163  }
164  pLast = &(pEntry->pNext);
165  pEntry = pEntry->pNext;
166  }
167 
168  // this key does not currently exist
169  // create a new entry and add to bin
170  p->nSize++;
171  (*pLast) = pEntry = ABC_ALLOC( Hash_Int_Entry_t, 1 );
172  pEntry->pNext = NULL;
173  pEntry->key = key;
174  pEntry->data = data;
175 
176  return;
177 }
Definition: hashInt.h:48
struct Hash_Int_Entry_t_ * pNext
Definition: hashInt.h:52
int nSize
Definition: hashInt.h:57
int nBins
Definition: hashInt.h:58
#define ABC_ALLOC(type, num)
Definition: abc_global.h:229
Hash_Int_Entry_t ** pArray
Definition: hashInt.h:60
int(* fHash)(int key, int nBins)
Definition: hashInt.h:59
int key
Definition: hashInt.h:50
enum keys key
int data
Definition: hashInt.h:51