From 175b42b48f52852b10af26a59c7e5e7b8e0ee13c Mon Sep 17 00:00:00 2001 From: Alan Mishchenko Date: Mon, 10 Apr 2017 14:17:03 -0700 Subject: Experiments with hashing. --- src/misc/util/utilNam.c | 24 ++++++++++++++++++++++-- src/misc/util/utilNam.h | 2 +- 2 files changed, 23 insertions(+), 3 deletions(-) (limited to 'src/misc/util') diff --git a/src/misc/util/utilNam.c b/src/misc/util/utilNam.c index 6cb180c0..30a68c63 100644 --- a/src/misc/util/utilNam.c +++ b/src/misc/util/utilNam.c @@ -131,11 +131,15 @@ void Abc_NamStop( Abc_Nam_t * p ) 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; + if ( pFile == NULL ) { printf( "Count node open file %s\n", pFileName ); return; } 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************************************************************* @@ -275,6 +279,22 @@ int Abc_NamStrHash( const char * pStr, const char * pLim, int 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************************************************************* diff --git a/src/misc/util/utilNam.h b/src/misc/util/utilNam.h index 8083a566..8e054fc1 100644 --- a/src/misc/util/utilNam.h +++ b/src/misc/util/utilNam.h @@ -52,7 +52,7 @@ typedef struct Abc_Nam_t_ Abc_Nam_t; /*=== utilNam.c ===============================================================*/ extern Abc_Nam_t * Abc_NamStart( int nObjs, int nAveSize ); 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 void Abc_NamDeref( Abc_Nam_t * p ); extern int Abc_NamObjNumMax( Abc_Nam_t * p ); -- cgit v1.2.3