diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2007-09-30 08:01:00 -0700 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2007-09-30 08:01:00 -0700 |
commit | e54d9691616b9a0326e2fdb3156bb4eeb8abfcd7 (patch) | |
tree | de3ffe87c3e17950351e3b7d97fa18318bd5ea9a /src/opt/fxu/fxuHeapS.c | |
parent | 7d7e60f2dc84393cd4c5db22d2eaf7b1fb1a79b2 (diff) | |
download | abc-e54d9691616b9a0326e2fdb3156bb4eeb8abfcd7.tar.gz abc-e54d9691616b9a0326e2fdb3156bb4eeb8abfcd7.tar.bz2 abc-e54d9691616b9a0326e2fdb3156bb4eeb8abfcd7.zip |
Version abc70930
Diffstat (limited to 'src/opt/fxu/fxuHeapS.c')
-rw-r--r-- | src/opt/fxu/fxuHeapS.c | 444 |
1 files changed, 0 insertions, 444 deletions
diff --git a/src/opt/fxu/fxuHeapS.c b/src/opt/fxu/fxuHeapS.c deleted file mode 100644 index eaca8363..00000000 --- a/src/opt/fxu/fxuHeapS.c +++ /dev/null @@ -1,444 +0,0 @@ -/**CFile**************************************************************** - - FileName [fxuHeapS.c] - - PackageName [MVSIS 2.0: Multi-valued logic synthesis system.] - - Synopsis [The priority queue for variables.] - - Author [MVSIS Group] - - Affiliation [UC Berkeley] - - Date [Ver. 1.0. Started - February 1, 2003.] - - Revision [$Id: fxuHeapS.c,v 1.0 2003/02/01 00:00:00 alanmi Exp $] - -***********************************************************************/ - -#include "fxuInt.h" - -//////////////////////////////////////////////////////////////////////// -/// DECLARATIONS /// -//////////////////////////////////////////////////////////////////////// - -#define FXU_HEAP_SINGLE_WEIGHT(pSingle) ((pSingle)->Weight) -#define FXU_HEAP_SINGLE_CURRENT(p, pSingle) ((p)->pTree[(pSingle)->HNum]) -#define FXU_HEAP_SINGLE_PARENT_EXISTS(p, pSingle) ((pSingle)->HNum > 1) -#define FXU_HEAP_SINGLE_CHILD1_EXISTS(p, pSingle) (((pSingle)->HNum << 1) <= p->nItems) -#define FXU_HEAP_SINGLE_CHILD2_EXISTS(p, pSingle) ((((pSingle)->HNum << 1)+1) <= p->nItems) -#define FXU_HEAP_SINGLE_PARENT(p, pSingle) ((p)->pTree[(pSingle)->HNum >> 1]) -#define FXU_HEAP_SINGLE_CHILD1(p, pSingle) ((p)->pTree[(pSingle)->HNum << 1]) -#define FXU_HEAP_SINGLE_CHILD2(p, pSingle) ((p)->pTree[((pSingle)->HNum << 1)+1]) -#define FXU_HEAP_SINGLE_ASSERT(p, pSingle) assert( (pSingle)->HNum >= 1 && (pSingle)->HNum <= p->nItemsAlloc ) - -static void Fxu_HeapSingleResize( Fxu_HeapSingle * p ); -static void Fxu_HeapSingleSwap( Fxu_Single ** pSingle1, Fxu_Single ** pSingle2 ); -static void Fxu_HeapSingleMoveUp( Fxu_HeapSingle * p, Fxu_Single * pSingle ); -static void Fxu_HeapSingleMoveDn( Fxu_HeapSingle * p, Fxu_Single * pSingle ); - -//////////////////////////////////////////////////////////////////////// -/// FUNCTION DEFINITIONS /// -//////////////////////////////////////////////////////////////////////// - -/**Function************************************************************* - - Synopsis [] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -Fxu_HeapSingle * Fxu_HeapSingleStart() -{ - Fxu_HeapSingle * p; - p = ALLOC( Fxu_HeapSingle, 1 ); - memset( p, 0, sizeof(Fxu_HeapSingle) ); - p->nItems = 0; - p->nItemsAlloc = 2000; - p->pTree = ALLOC( Fxu_Single *, p->nItemsAlloc + 10 ); - p->pTree[0] = NULL; - return p; -} - - -/**Function************************************************************* - - Synopsis [] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Fxu_HeapSingleResize( Fxu_HeapSingle * p ) -{ - p->nItemsAlloc *= 2; - p->pTree = REALLOC( Fxu_Single *, p->pTree, p->nItemsAlloc + 10 ); -} - -/**Function************************************************************* - - Synopsis [] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Fxu_HeapSingleStop( Fxu_HeapSingle * p ) -{ - int i; - i = 0; - free( p->pTree ); - i = 1; - free( p ); -} - - -/**Function************************************************************* - - Synopsis [] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Fxu_HeapSinglePrint( FILE * pFile, Fxu_HeapSingle * p ) -{ - Fxu_Single * pSingle; - int Counter = 1; - int Degree = 1; - - Fxu_HeapSingleCheck( p ); - fprintf( pFile, "The contents of the heap:\n" ); - fprintf( pFile, "Level %d: ", Degree ); - Fxu_HeapSingleForEachItem( p, pSingle ) - { - assert( Counter == p->pTree[Counter]->HNum ); - fprintf( pFile, "%2d=%3d ", Counter, FXU_HEAP_SINGLE_WEIGHT(p->pTree[Counter]) ); - if ( ++Counter == (1 << Degree) ) - { - fprintf( pFile, "\n" ); - Degree++; - fprintf( pFile, "Level %d: ", Degree ); - } - } - fprintf( pFile, "\n" ); - fprintf( pFile, "End of the heap printout.\n" ); -} - -/**Function************************************************************* - - Synopsis [] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Fxu_HeapSingleCheck( Fxu_HeapSingle * p ) -{ - Fxu_Single * pSingle; - Fxu_HeapSingleForEachItem( p, pSingle ) - { - assert( pSingle->HNum == p->i ); - Fxu_HeapSingleCheckOne( p, pSingle ); - } -} - -/**Function************************************************************* - - Synopsis [] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Fxu_HeapSingleCheckOne( Fxu_HeapSingle * p, Fxu_Single * pSingle ) -{ - int Weight1, Weight2; - if ( FXU_HEAP_SINGLE_CHILD1_EXISTS(p,pSingle) ) - { - Weight1 = FXU_HEAP_SINGLE_WEIGHT(pSingle); - Weight2 = FXU_HEAP_SINGLE_WEIGHT( FXU_HEAP_SINGLE_CHILD1(p,pSingle) ); - assert( Weight1 >= Weight2 ); - } - if ( FXU_HEAP_SINGLE_CHILD2_EXISTS(p,pSingle) ) - { - Weight1 = FXU_HEAP_SINGLE_WEIGHT(pSingle); - Weight2 = FXU_HEAP_SINGLE_WEIGHT( FXU_HEAP_SINGLE_CHILD2(p,pSingle) ); - assert( Weight1 >= Weight2 ); - } -} - -/**Function************************************************************* - - Synopsis [] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Fxu_HeapSingleInsert( Fxu_HeapSingle * p, Fxu_Single * pSingle ) -{ - if ( p->nItems == p->nItemsAlloc ) - Fxu_HeapSingleResize( p ); - // put the last entry to the last place and move up - p->pTree[++p->nItems] = pSingle; - pSingle->HNum = p->nItems; - // move the last entry up if necessary - Fxu_HeapSingleMoveUp( p, pSingle ); -} - -/**Function************************************************************* - - Synopsis [] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Fxu_HeapSingleUpdate( Fxu_HeapSingle * p, Fxu_Single * pSingle ) -{ - FXU_HEAP_SINGLE_ASSERT(p,pSingle); - if ( FXU_HEAP_SINGLE_PARENT_EXISTS(p,pSingle) && - FXU_HEAP_SINGLE_WEIGHT(pSingle) > FXU_HEAP_SINGLE_WEIGHT( FXU_HEAP_SINGLE_PARENT(p,pSingle) ) ) - Fxu_HeapSingleMoveUp( p, pSingle ); - else if ( FXU_HEAP_SINGLE_CHILD1_EXISTS(p,pSingle) && - FXU_HEAP_SINGLE_WEIGHT(pSingle) < FXU_HEAP_SINGLE_WEIGHT( FXU_HEAP_SINGLE_CHILD1(p,pSingle) ) ) - Fxu_HeapSingleMoveDn( p, pSingle ); - else if ( FXU_HEAP_SINGLE_CHILD2_EXISTS(p,pSingle) && - FXU_HEAP_SINGLE_WEIGHT(pSingle) < FXU_HEAP_SINGLE_WEIGHT( FXU_HEAP_SINGLE_CHILD2(p,pSingle) ) ) - Fxu_HeapSingleMoveDn( p, pSingle ); -} - -/**Function************************************************************* - - Synopsis [] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Fxu_HeapSingleDelete( Fxu_HeapSingle * p, Fxu_Single * pSingle ) -{ - int Place = pSingle->HNum; - FXU_HEAP_SINGLE_ASSERT(p,pSingle); - // put the last entry to the deleted place - // decrement the number of entries - p->pTree[Place] = p->pTree[p->nItems--]; - p->pTree[Place]->HNum = Place; - // move the top entry down if necessary - Fxu_HeapSingleUpdate( p, p->pTree[Place] ); - pSingle->HNum = 0; -} - -/**Function************************************************************* - - Synopsis [] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -Fxu_Single * Fxu_HeapSingleReadMax( Fxu_HeapSingle * p ) -{ - if ( p->nItems == 0 ) - return NULL; - return p->pTree[1]; -} - -/**Function************************************************************* - - Synopsis [] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -Fxu_Single * Fxu_HeapSingleGetMax( Fxu_HeapSingle * p ) -{ - Fxu_Single * pSingle; - if ( p->nItems == 0 ) - return NULL; - // prepare the return value - pSingle = p->pTree[1]; - pSingle->HNum = 0; - // put the last entry on top - // decrement the number of entries - p->pTree[1] = p->pTree[p->nItems--]; - p->pTree[1]->HNum = 1; - // move the top entry down if necessary - Fxu_HeapSingleMoveDn( p, p->pTree[1] ); - return pSingle; -} - -/**Function************************************************************* - - Synopsis [] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -int Fxu_HeapSingleReadMaxWeight( Fxu_HeapSingle * p ) -{ - if ( p->nItems == 0 ) - return -1; - return FXU_HEAP_SINGLE_WEIGHT(p->pTree[1]); -} - - - -/**Function************************************************************* - - Synopsis [] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Fxu_HeapSingleSwap( Fxu_Single ** pSingle1, Fxu_Single ** pSingle2 ) -{ - Fxu_Single * pSingle; - int Temp; - pSingle = *pSingle1; - *pSingle1 = *pSingle2; - *pSingle2 = pSingle; - Temp = (*pSingle1)->HNum; - (*pSingle1)->HNum = (*pSingle2)->HNum; - (*pSingle2)->HNum = Temp; -} - -/**Function************************************************************* - - Synopsis [] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Fxu_HeapSingleMoveUp( Fxu_HeapSingle * p, Fxu_Single * pSingle ) -{ - Fxu_Single ** ppSingle, ** ppPar; - ppSingle = &FXU_HEAP_SINGLE_CURRENT(p, pSingle); - while ( FXU_HEAP_SINGLE_PARENT_EXISTS(p,*ppSingle) ) - { - ppPar = &FXU_HEAP_SINGLE_PARENT(p,*ppSingle); - if ( FXU_HEAP_SINGLE_WEIGHT(*ppSingle) > FXU_HEAP_SINGLE_WEIGHT(*ppPar) ) - { - Fxu_HeapSingleSwap( ppSingle, ppPar ); - ppSingle = ppPar; - } - else - break; - } -} - -/**Function************************************************************* - - Synopsis [] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Fxu_HeapSingleMoveDn( Fxu_HeapSingle * p, Fxu_Single * pSingle ) -{ - Fxu_Single ** ppChild1, ** ppChild2, ** ppSingle; - ppSingle = &FXU_HEAP_SINGLE_CURRENT(p, pSingle); - while ( FXU_HEAP_SINGLE_CHILD1_EXISTS(p,*ppSingle) ) - { // if Child1 does not exist, Child2 also does not exists - - // get the children - ppChild1 = &FXU_HEAP_SINGLE_CHILD1(p,*ppSingle); - if ( FXU_HEAP_SINGLE_CHILD2_EXISTS(p,*ppSingle) ) - { - ppChild2 = &FXU_HEAP_SINGLE_CHILD2(p,*ppSingle); - - // consider two cases - if ( FXU_HEAP_SINGLE_WEIGHT(*ppSingle) >= FXU_HEAP_SINGLE_WEIGHT(*ppChild1) && - FXU_HEAP_SINGLE_WEIGHT(*ppSingle) >= FXU_HEAP_SINGLE_WEIGHT(*ppChild2) ) - { // Var is larger than both, skip - break; - } - else - { // Var is smaller than one of them, then swap it with larger - if ( FXU_HEAP_SINGLE_WEIGHT(*ppChild1) >= FXU_HEAP_SINGLE_WEIGHT(*ppChild2) ) - { - Fxu_HeapSingleSwap( ppSingle, ppChild1 ); - // update the pointer - ppSingle = ppChild1; - } - else - { - Fxu_HeapSingleSwap( ppSingle, ppChild2 ); - // update the pointer - ppSingle = ppChild2; - } - } - } - else // Child2 does not exist - { - // consider two cases - if ( FXU_HEAP_SINGLE_WEIGHT(*ppSingle) >= FXU_HEAP_SINGLE_WEIGHT(*ppChild1) ) - { // Var is larger than Child1, skip - break; - } - else - { // Var is smaller than Child1, then swap them - Fxu_HeapSingleSwap( ppSingle, ppChild1 ); - // update the pointer - ppSingle = ppChild1; - } - } - } -} - - -//////////////////////////////////////////////////////////////////////// -/// END OF FILE /// -//////////////////////////////////////////////////////////////////////// |