diff options
| author | Alan Mishchenko <alanmi@berkeley.edu> | 2013-09-26 19:04:18 -0700 | 
|---|---|---|
| committer | Alan Mishchenko <alanmi@berkeley.edu> | 2013-09-26 19:04:18 -0700 | 
| commit | f704aa43fbde77c29a28c83eb10a2a2e1a1f5a54 (patch) | |
| tree | a430dc2b21a3af6cde38b79f32bdc4a1e6ed4071 /src/misc/vec | |
| parent | 16a75e9861502d0d78a567d54764308bd47f6c81 (diff) | |
| download | abc-f704aa43fbde77c29a28c83eb10a2a2e1a1f5a54.tar.gz abc-f704aa43fbde77c29a28c83eb10a2a2e1a1f5a54.tar.bz2 abc-f704aa43fbde77c29a28c83eb10a2a2e1a1f5a54.zip | |
New logic sharing extraction.
Diffstat (limited to 'src/misc/vec')
| -rw-r--r-- | src/misc/vec/vecHash.h | 253 | ||||
| -rw-r--r-- | src/misc/vec/vecHsh4.h | 213 | 
2 files changed, 253 insertions, 213 deletions
| diff --git a/src/misc/vec/vecHash.h b/src/misc/vec/vecHash.h new file mode 100644 index 00000000..e695f154 --- /dev/null +++ b/src/misc/vec/vecHash.h @@ -0,0 +1,253 @@ +/**CFile**************************************************************** + +  FileName    [vecHash.h] + +  SystemName  [ABC: Logic synthesis and verification system.] + +  PackageName [Resizable arrays.] + +  Synopsis    [Hashing integer pairs/triples into an integer.] + +  Author      [Alan Mishchenko] +   +  Affiliation [UC Berkeley] + +  Date        [Ver. 1.0. Started - June 20, 2005.] + +  Revision    [$Id: vecHash.h,v 1.00 2005/06/20 00:00:00 alanmi Exp $] + +***********************************************************************/ +  +#ifndef ABC__misc__vec__vecHash_h +#define ABC__misc__vec__vecHash_h + + +//////////////////////////////////////////////////////////////////////// +///                          INCLUDES                                /// +//////////////////////////////////////////////////////////////////////// + +#include <stdio.h> + +ABC_NAMESPACE_HEADER_START + + +//////////////////////////////////////////////////////////////////////// +///                         PARAMETERS                               /// +//////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////// +///                         BASIC TYPES                              /// +//////////////////////////////////////////////////////////////////////// + +typedef struct Hash_IntObj_t_ Hash_IntObj_t; +struct Hash_IntObj_t_ +{ +    int          iData0; +    int          iData1; +    int          iData2; +    int          iNext; +}; + +typedef struct Hash_IntMan_t_ Hash_IntMan_t; +struct Hash_IntMan_t_ +{ +    Vec_Int_t *  vTable;      // hash table +    Vec_Int_t *  vObjs;       // hash objects +}; + +//////////////////////////////////////////////////////////////////////// +///                      MACRO DEFINITIONS                           /// +//////////////////////////////////////////////////////////////////////// + +static inline Hash_IntObj_t * Hash_IntObj( Hash_IntMan_t * p, int i )           { return i ? (Hash_IntObj_t *)Vec_IntEntryP(p->vObjs, 4*i) : NULL;  } +static inline int             Hash_IntObjData0( Hash_IntMan_t * p, int i )      { return Hash_IntObj(p, i)->iData0;                                 } +static inline int             Hash_IntObjData1( Hash_IntMan_t * p, int i )      { return Hash_IntObj(p, i)->iData1;                                 } +static inline int             Hash_IntObjData2( Hash_IntMan_t * p, int i )      { return Hash_IntObj(p, i)->iData2;                                 } + +static inline int             Hash_Int2ObjInc( Hash_IntMan_t * p, int i )             { return Hash_IntObj(p, i)->iData2++;                         } +static inline int             Hash_Int2ObjDec( Hash_IntMan_t * p, int i )             { return --Hash_IntObj(p, i)->iData2;                         } +static inline void            Hash_Int2ObjSetData2( Hash_IntMan_t * p, int i, int d ) { Hash_IntObj(p, i)->iData2 = d;                              } + +//////////////////////////////////////////////////////////////////////// +///                     FUNCTION DEFINITIONS                         /// +//////////////////////////////////////////////////////////////////////// + +/**Function************************************************************* + +  Synopsis    [Hashing data entries composed of nSize integers.] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +static inline Hash_IntMan_t * Hash_IntManStart( int nSize ) +{ +    Hash_IntMan_t * p;  nSize += 100; +    p = ABC_CALLOC( Hash_IntMan_t, 1 ); +    p->vTable = Vec_IntStart( Abc_PrimeCudd(nSize) ); +    p->vObjs  = Vec_IntAlloc( 4*nSize ); +    Vec_IntFill( p->vObjs, 4, 0 ); +    return p; +} +static inline void Hash_IntManStop( Hash_IntMan_t * p ) +{ +    Vec_IntFree( p->vObjs ); +    Vec_IntFree( p->vTable ); +    ABC_FREE( p ); +} +static inline int Hash_IntManEntryNum( Hash_IntMan_t * p ) +{ +    return Vec_IntSize(p->vObjs)/4 - 1; +} + +/**Function************************************************************* + +  Synopsis    [] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +static inline int Hash_Int2ManHash( int iData0, int iData1, int nTableSize ) +{ +    return (4177 * (unsigned)iData0 + 7873 * (unsigned)iData1) % (unsigned)nTableSize; +} +static inline int * Hash_Int2ManLookup( Hash_IntMan_t * p, int iData0, int iData1 ) +{ +    Hash_IntObj_t * pObj; +    int * pPlace = Vec_IntEntryP( p->vTable, Hash_Int2ManHash(iData0, iData1, Vec_IntSize(p->vTable)) ); +    for ( ; (pObj = Hash_IntObj(p, *pPlace)); pPlace = &pObj->iNext ) +        if ( pObj->iData0 == iData0 && pObj->iData1 == iData1 ) +            return pPlace; +    assert( *pPlace == 0 ); +    return pPlace; +} +static inline int Hash_Int2ManInsert( Hash_IntMan_t * p, int iData0, int iData1, int iData2 ) +{ +    Hash_IntObj_t * pObj; +    int i, nObjs, * pPlace; +    nObjs = Vec_IntSize(p->vObjs)/4; +    if ( nObjs > Vec_IntSize(p->vTable) ) +    { +//        printf( "Resizing...\n" ); +        Vec_IntFill( p->vTable, Abc_PrimeCudd(2*Vec_IntSize(p->vTable)), 0 ); +        for ( i = 1; i < nObjs; i++ ) +        { +            pObj = Hash_IntObj( p, i ); +            pObj->iNext = 0; +            pPlace = Hash_Int2ManLookup( p, pObj->iData0, pObj->iData1 ); +            assert( *pPlace == 0 ); +            *pPlace = i; +        } +    } +    pPlace = Hash_Int2ManLookup( p, iData0, iData1 ); +    if ( *pPlace ) +        return *pPlace; +    *pPlace = nObjs; +    Vec_IntPush( p->vObjs, iData0 ); +    Vec_IntPush( p->vObjs, iData1 ); +    Vec_IntPush( p->vObjs, iData2 ); +    Vec_IntPush( p->vObjs, 0 ); +    return nObjs; +} + +/**Function************************************************************* + +  Synopsis    [] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +static inline int Hsh_Int3ManHash( int iData0, int iData1, int iData2, int nTableSize ) +{ +    return (4177 * (unsigned)iData0 + 7873 * (unsigned)iData1 + 1699 * (unsigned)iData2) % (unsigned)nTableSize; +} +static inline int * Hsh_Int3ManLookup( Hash_IntMan_t * p, int iData0, int iData1, int iData2 ) +{ +    Hash_IntObj_t * pObj; +    int * pPlace = Vec_IntEntryP( p->vTable, Hsh_Int3ManHash(iData0, iData1, iData2, Vec_IntSize(p->vTable)) ); +    for ( ; (pObj = Hash_IntObj(p, *pPlace)); pPlace = &pObj->iNext ) +        if ( pObj->iData0 == iData0 && pObj->iData1 == iData1 && pObj->iData2 == iData2 ) +            return pPlace; +    assert( *pPlace == 0 ); +    return pPlace; +} +static inline int Hsh_Int3ManInsert( Hash_IntMan_t * p, int iData0, int iData1, int iData2 ) +{ +    Hash_IntObj_t * pObj; +    int i, nObjs, * pPlace; +    nObjs = Vec_IntSize(p->vObjs)/4; +    if ( nObjs > Vec_IntSize(p->vTable) ) +    { +//        printf( "Resizing...\n" ); +        Vec_IntFill( p->vTable, Abc_PrimeCudd(2*Vec_IntSize(p->vTable)), 0 ); +        for ( i = 1; i < nObjs; i++ ) +        { +            pObj = Hash_IntObj( p, i ); +            pObj->iNext = 0; +            pPlace = Hsh_Int3ManLookup( p, pObj->iData0, pObj->iData1, pObj->iData2 ); +            assert( *pPlace == 0 ); +            *pPlace = i; +        } +    } +    pPlace = Hsh_Int3ManLookup( p, iData0, iData1, iData2 ); +    if ( *pPlace ) +        return *pPlace; +    *pPlace = nObjs; +    Vec_IntPush( p->vObjs, iData0 ); +    Vec_IntPush( p->vObjs, iData1 ); +    Vec_IntPush( p->vObjs, iData2 ); +    Vec_IntPush( p->vObjs, 0 ); +    return nObjs; +} + +/**Function************************************************************* + +  Synopsis    [Test procedure.] + +  Description [] +                +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +static inline void Hash_IntManHashArrayTest() +{ +    Hash_IntMan_t * p; +    int RetValue; + +    p = Hash_IntManStart( 10 ); + +    RetValue = Hash_Int2ManInsert( p, 10, 11, 12 ); +    assert( RetValue ); + +    RetValue = Hash_Int2ManInsert( p, 20, 21, 22 ); +    assert( RetValue ); + +    RetValue = Hash_Int2ManInsert( p, 10, 11, 12 ); +    assert( !RetValue ); +  +    Hash_IntManStop( p ); +} + + + +//////////////////////////////////////////////////////////////////////// +///                       END OF FILE                                /// +//////////////////////////////////////////////////////////////////////// + +ABC_NAMESPACE_HEADER_END + +#endif + diff --git a/src/misc/vec/vecHsh4.h b/src/misc/vec/vecHsh4.h deleted file mode 100644 index 2e79ee4a..00000000 --- a/src/misc/vec/vecHsh4.h +++ /dev/null @@ -1,213 +0,0 @@ -/**CFile**************************************************************** - -  FileName    [vecHsh4.h] - -  SystemName  [ABC: Logic synthesis and verification system.] - -  PackageName [Resizable arrays.] - -  Synopsis    [Hashing pairs of integers into an integer.] - -  Author      [Alan Mishchenko] -   -  Affiliation [UC Berkeley] - -  Date        [Ver. 1.0. Started - June 20, 2005.] - -  Revision    [$Id: vecHsh4.h,v 1.00 2005/06/20 00:00:00 alanmi Exp $] - -***********************************************************************/ -  -#ifndef ABC__misc__vec__vecHsh4_h -#define ABC__misc__vec__vecHsh4_h - - -//////////////////////////////////////////////////////////////////////// -///                          INCLUDES                                /// -//////////////////////////////////////////////////////////////////////// - -#include <stdio.h> - -ABC_NAMESPACE_HEADER_START - - -//////////////////////////////////////////////////////////////////////// -///                         PARAMETERS                               /// -//////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////// -///                         BASIC TYPES                              /// -//////////////////////////////////////////////////////////////////////// - -typedef struct Hsh_Int4Obj_t_ Hsh_Int4Obj_t; -struct Hsh_Int4Obj_t_ -{ -    int          iData0; -    int          iData1; -    int          iRes; -    int          iNext; -}; - -typedef struct Hsh_Int4Man_t_ Hsh_Int4Man_t; -struct Hsh_Int4Man_t_ -{ -    Vec_Int_t *  vTable;      // hash table -    Vec_Int_t *  vObjs;       // hash objects -}; - -//////////////////////////////////////////////////////////////////////// -///                      MACRO DEFINITIONS                           /// -//////////////////////////////////////////////////////////////////////// - -static inline Hsh_Int4Obj_t * Hsh_Int4Obj( Hsh_Int4Man_t * p, int iObj )    { return iObj ? (Hsh_Int4Obj_t *)Vec_IntEntryP(p->vObjs, 4*iObj) : NULL;  } -static inline int             Hsh_Int4ObjData0( Hsh_Int4Man_t * p, int i )  { return Hsh_Int4Obj(p, i)->iData0;                                       } -static inline int             Hsh_Int4ObjData1( Hsh_Int4Man_t * p, int i )  { return Hsh_Int4Obj(p, i)->iData1;                                       } -static inline int             Hsh_Int4ObjRes( Hsh_Int4Man_t * p, int i )    { return Hsh_Int4Obj(p, i)->iRes;                                         } -static inline void            Hsh_Int4ObjInc( Hsh_Int4Man_t * p, int i )    { Hsh_Int4Obj(p, i)->iRes++;                                              } -static inline void            Hsh_Int4ObjDec( Hsh_Int4Man_t * p, int i )    { Hsh_Int4Obj(p, i)->iRes--;                                              } - -//////////////////////////////////////////////////////////////////////// -///                     FUNCTION DEFINITIONS                         /// -//////////////////////////////////////////////////////////////////////// - -/**Function************************************************************* - -  Synopsis    [Hashing data entries composed of nSize integers.] - -  Description [] -                -  SideEffects [] - -  SeeAlso     [] - -***********************************************************************/ -static inline Hsh_Int4Man_t * Hsh_Int4ManStart( int nSize ) -{ -    Hsh_Int4Man_t * p;  nSize += 100; -    p = ABC_CALLOC( Hsh_Int4Man_t, 1 ); -    p->vTable = Vec_IntStart( Abc_PrimeCudd(nSize) ); -    p->vObjs  = Vec_IntAlloc( 4*nSize ); -    Vec_IntFill( p->vObjs, 4, 0 ); -    return p; -} -static inline void Hsh_Int4ManStop( Hsh_Int4Man_t * p ) -{ -    Vec_IntFree( p->vObjs ); -    Vec_IntFree( p->vTable ); -    ABC_FREE( p ); -} -static inline int Hsh_Int4ManEntryNum( Hsh_Int4Man_t * p ) -{ -    return Vec_IntSize(p->vObjs)/4 - 1; -} - -/**Function************************************************************* - -  Synopsis    [] - -  Description [] -                -  SideEffects [] - -  SeeAlso     [] - -***********************************************************************/ -static inline int Hsh_Int4ManHash( int iData0, int iData1, int nTableSize ) -{ -    return (4177 * (unsigned)iData0 + 7873 * (unsigned)iData1) % (unsigned)nTableSize; -} -static inline int * Hsh_Int4ManLookup( Hsh_Int4Man_t * p, int iData0, int iData1 ) -{ -    Hsh_Int4Obj_t * pObj; -    int * pPlace = Vec_IntEntryP( p->vTable, Hsh_Int4ManHash(iData0, iData1, Vec_IntSize(p->vTable)) ); -    for ( ; (pObj = Hsh_Int4Obj(p, *pPlace)); pPlace = &pObj->iNext ) -        if ( pObj->iData0 == iData0 && pObj->iData1 == iData1 ) -            return pPlace; -    assert( *pPlace == 0 ); -    return pPlace; -} -static inline int Hsh_Int4ManFind( Hsh_Int4Man_t * p, int iData0, int iData1 ) -{ -    Hsh_Int4Obj_t * pObj; -    int * pPlace = Vec_IntEntryP( p->vTable, Hsh_Int4ManHash(iData0, iData1, Vec_IntSize(p->vTable)) ); -    for ( ; (pObj = Hsh_Int4Obj(p, *pPlace)); pPlace = &pObj->iNext ) -        if ( pObj->iData0 == iData0 && pObj->iData1 == iData1 ) -            return pObj->iRes; -    assert( *pPlace == 0 ); -    return -1; -} -static inline int Hsh_Int4ManInsert( Hsh_Int4Man_t * p, int iData0, int iData1, int iRes ) -{ -    Hsh_Int4Obj_t * pObj; -    int i, nObjs, * pPlace; -    nObjs = Vec_IntSize(p->vObjs)/4; -    if ( nObjs > Vec_IntSize(p->vTable) ) -    { -//        printf( "Resizing...\n" ); -        Vec_IntFill( p->vTable, Abc_PrimeCudd(2*Vec_IntSize(p->vTable)), 0 ); -        for ( i = 1; i < nObjs; i++ ) -        { -            pObj = Hsh_Int4Obj( p, i ); -            pObj->iNext = 0; -            pPlace = Hsh_Int4ManLookup( p, pObj->iData0, pObj->iData1 ); -            assert( *pPlace == 0 ); -            *pPlace = i; -        } -    } -    pPlace = Hsh_Int4ManLookup( p, iData0, iData1 ); -    if ( *pPlace ) -        return *pPlace; -    *pPlace = nObjs; -    Vec_IntPush( p->vObjs, iData0 ); -    Vec_IntPush( p->vObjs, iData1 ); -    Vec_IntPush( p->vObjs, iRes ); -    Vec_IntPush( p->vObjs, 0 ); -    return nObjs; -} - -/**Function************************************************************* - -  Synopsis    [Test procedure.] - -  Description [] -                -  SideEffects [] - -  SeeAlso     [] - -***********************************************************************/ -static inline void Hsh_Int4ManHashArrayTest() -{ -    Hsh_Int4Man_t * p; -    int RetValue; - -    p = Hsh_Int4ManStart( 10 ); - -    RetValue = Hsh_Int4ManInsert( p, 10, 11, 12 ); -    assert( RetValue ); - -    RetValue = Hsh_Int4ManInsert( p, 20, 21, 22 ); -    assert( RetValue ); - -    RetValue = Hsh_Int4ManInsert( p, 10, 11, 12 ); -    assert( !RetValue ); - -    RetValue = Hsh_Int4ManFind( p, 20, 21 ); -    assert( RetValue == 22 ); - -    RetValue = Hsh_Int4ManFind( p, 20, 22 ); -    assert( RetValue == -1 ); -  -    Hsh_Int4ManStop( p ); -} - - - -//////////////////////////////////////////////////////////////////////// -///                       END OF FILE                                /// -//////////////////////////////////////////////////////////////////////// - -ABC_NAMESPACE_HEADER_END - -#endif - | 
