Commit 175b42b4 by Alan Mishchenko

Experiments with hashing.

parent fe3d3341
...@@ -131,11 +131,15 @@ void Abc_NamStop( Abc_Nam_t * p ) ...@@ -131,11 +131,15 @@ void Abc_NamStop( Abc_Nam_t * p )
SeeAlso [] SeeAlso []
***********************************************************************/ ***********************************************************************/
void Abc_NamPrint( Abc_Nam_t * p ) void Abc_NamPrint( Abc_Nam_t * p, char * pFileName )
{ {
FILE * pFile = pFileName ? fopen( pFileName, "wb" ) : stdout;
int h, i; int h, i;
if ( pFile == NULL ) { printf( "Count node open file %s\n", pFileName ); return; }
Vec_IntForEachEntryStart( &p->vInt2Handle, h, i, 1 ) Vec_IntForEachEntryStart( &p->vInt2Handle, h, i, 1 )
Abc_Print( 1, "%d=\n%s\n", i, Abc_NamHandleToStr(p, h) ); fprintf( pFile, "%8d = %s\n", i, Abc_NamHandleToStr(p, h) );
if ( pFile != stdout )
fclose(pFile);
} }
/**Function************************************************************* /**Function*************************************************************
...@@ -275,6 +279,22 @@ int Abc_NamStrHash( const char * pStr, const char * pLim, int nTableSize ) ...@@ -275,6 +279,22 @@ int Abc_NamStrHash( const char * pStr, const char * pLim, int nTableSize )
} }
return uHash % nTableSize; return uHash % nTableSize;
} }
// https://en.wikipedia.org/wiki/Jenkins_hash_function
int Abc_NamStrHash2( const char * pStr, const char * pLim, int nTableSize )
{
int nSize = pLim ? pLim - pStr : -1;
int i = 0; unsigned hash = 0;
while ( i != nSize && pStr[i] )
{
hash += pStr[i++];
hash += hash << 10;
hash ^= hash >> 6;
}
hash += hash << 3;
hash ^= hash >> 11;
hash += hash << 15;
return (int)(hash % nTableSize);
}
/**Function************************************************************* /**Function*************************************************************
......
...@@ -52,7 +52,7 @@ typedef struct Abc_Nam_t_ Abc_Nam_t; ...@@ -52,7 +52,7 @@ typedef struct Abc_Nam_t_ Abc_Nam_t;
/*=== utilNam.c ===============================================================*/ /*=== utilNam.c ===============================================================*/
extern Abc_Nam_t * Abc_NamStart( int nObjs, int nAveSize ); extern Abc_Nam_t * Abc_NamStart( int nObjs, int nAveSize );
extern void Abc_NamStop( Abc_Nam_t * p ); extern void Abc_NamStop( Abc_Nam_t * p );
extern void Abc_NamPrint( Abc_Nam_t * p ); extern void Abc_NamPrint( Abc_Nam_t * p, char * pFileName );
extern Abc_Nam_t * Abc_NamRef( Abc_Nam_t * p ); extern Abc_Nam_t * Abc_NamRef( Abc_Nam_t * p );
extern void Abc_NamDeref( Abc_Nam_t * p ); extern void Abc_NamDeref( Abc_Nam_t * p );
extern int Abc_NamObjNumMax( Abc_Nam_t * p ); extern int Abc_NamObjNumMax( Abc_Nam_t * p );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment