ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
fxuHeapD.c File Reference
#include "fxuInt.h"
Include dependency graph for fxuHeapD.c:

Go to the source code of this file.

Macros

#define FXU_HEAP_DOUBLE_WEIGHT(pDiv)
 DECLARATIONS ///.
 
#define FXU_HEAP_DOUBLE_CURRENT(p, pDiv)
 
#define FXU_HEAP_DOUBLE_PARENT_EXISTS(p, pDiv)
 
#define FXU_HEAP_DOUBLE_CHILD1_EXISTS(p, pDiv)
 
#define FXU_HEAP_DOUBLE_CHILD2_EXISTS(p, pDiv)
 
#define FXU_HEAP_DOUBLE_PARENT(p, pDiv)
 
#define FXU_HEAP_DOUBLE_CHILD1(p, pDiv)
 
#define FXU_HEAP_DOUBLE_CHILD2(p, pDiv)
 
#define FXU_HEAP_DOUBLE_ASSERT(p, pDiv)
 

Functions

Fxu_HeapDoubleFxu_HeapDoubleStart ()
 FUNCTION DEFINITIONS ///.
 
void Fxu_HeapDoubleStop (Fxu_HeapDouble *p)
 
void Fxu_HeapDoublePrint (FILE *pFile, Fxu_HeapDouble *p)
 
void Fxu_HeapDoubleCheck (Fxu_HeapDouble *p)
 
void Fxu_HeapDoubleCheckOne (Fxu_HeapDouble *p, Fxu_Double *pDiv)
 
void Fxu_HeapDoubleInsert (Fxu_HeapDouble *p, Fxu_Double *pDiv)
 
void Fxu_HeapDoubleUpdate (Fxu_HeapDouble *p, Fxu_Double *pDiv)
 
void Fxu_HeapDoubleDelete (Fxu_HeapDouble *p, Fxu_Double *pDiv)
 
Fxu_DoubleFxu_HeapDoubleReadMax (Fxu_HeapDouble *p)
 
Fxu_DoubleFxu_HeapDoubleGetMax (Fxu_HeapDouble *p)
 
int Fxu_HeapDoubleReadMaxWeight (Fxu_HeapDouble *p)
 

Macro Definition Documentation

◆ FXU_HEAP_DOUBLE_ASSERT

#define FXU_HEAP_DOUBLE_ASSERT ( p,
pDiv )
Value:
assert( (pDiv)->HNum >= 1 && (pDiv)->HNum <= p->nItemsAlloc )
#define assert(ex)
Definition util_old.h:213

Definition at line 36 of file fxuHeapD.c.

◆ FXU_HEAP_DOUBLE_CHILD1

#define FXU_HEAP_DOUBLE_CHILD1 ( p,
pDiv )
Value:
((p)->pTree[(pDiv)->HNum << 1])
Cube * p
Definition exorList.c:222

Definition at line 34 of file fxuHeapD.c.

◆ FXU_HEAP_DOUBLE_CHILD1_EXISTS

#define FXU_HEAP_DOUBLE_CHILD1_EXISTS ( p,
pDiv )
Value:
(((pDiv)->HNum << 1) <= p->nItems)

Definition at line 31 of file fxuHeapD.c.

◆ FXU_HEAP_DOUBLE_CHILD2

#define FXU_HEAP_DOUBLE_CHILD2 ( p,
pDiv )
Value:
((p)->pTree[((pDiv)->HNum << 1)+1])

Definition at line 35 of file fxuHeapD.c.

◆ FXU_HEAP_DOUBLE_CHILD2_EXISTS

#define FXU_HEAP_DOUBLE_CHILD2_EXISTS ( p,
pDiv )
Value:
((((pDiv)->HNum << 1)+1) <= p->nItems)

Definition at line 32 of file fxuHeapD.c.

◆ FXU_HEAP_DOUBLE_CURRENT

#define FXU_HEAP_DOUBLE_CURRENT ( p,
pDiv )
Value:
((p)->pTree[(pDiv)->HNum])

Definition at line 29 of file fxuHeapD.c.

◆ FXU_HEAP_DOUBLE_PARENT

#define FXU_HEAP_DOUBLE_PARENT ( p,
pDiv )
Value:
((p)->pTree[(pDiv)->HNum >> 1])

Definition at line 33 of file fxuHeapD.c.

◆ FXU_HEAP_DOUBLE_PARENT_EXISTS

#define FXU_HEAP_DOUBLE_PARENT_EXISTS ( p,
pDiv )
Value:
((pDiv)->HNum > 1)

Definition at line 30 of file fxuHeapD.c.

◆ FXU_HEAP_DOUBLE_WEIGHT

#define FXU_HEAP_DOUBLE_WEIGHT ( pDiv)
Value:
((pDiv)->Weight)

DECLARATIONS ///.

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

FileName [fxuHeapD.c]

PackageName [MVSIS 2.0: Multi-valued logic synthesis system.]

Synopsis [The priority queue for double cube divisors.]

Author [MVSIS Group]

Affiliation [UC Berkeley]

Date [Ver. 1.0. Started - February 1, 2003.]

Revision [

Id
fxuHeapD.c,v 1.0 2003/02/01 00:00:00 alanmi Exp

]

Definition at line 28 of file fxuHeapD.c.

Function Documentation

◆ Fxu_HeapDoubleCheck()

void Fxu_HeapDoubleCheck ( Fxu_HeapDouble * p)

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

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 152 of file fxuHeapD.c.

153{
154 Fxu_Double * pDiv;
156 {
157 assert( pDiv->HNum == p->i );
158 Fxu_HeapDoubleCheckOne( p, pDiv );
159 }
160}
void Fxu_HeapDoubleCheckOne(Fxu_HeapDouble *p, Fxu_Double *pDiv)
Definition fxuHeapD.c:173
struct FxuDouble Fxu_Double
Definition fxuInt.h:72
#define Fxu_HeapDoubleForEachItem(Heap, Div)
Definition fxuInt.h:375
int HNum
Definition fxuInt.h:257
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Fxu_HeapDoubleCheckOne()

void Fxu_HeapDoubleCheckOne ( Fxu_HeapDouble * p,
Fxu_Double * pDiv )

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

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 173 of file fxuHeapD.c.

174{
175 int Weight1, Weight2;
177 {
178 Weight1 = FXU_HEAP_DOUBLE_WEIGHT(pDiv);
180 assert( Weight1 >= Weight2 );
181 }
183 {
184 Weight1 = FXU_HEAP_DOUBLE_WEIGHT(pDiv);
186 assert( Weight1 >= Weight2 );
187 }
188}
#define FXU_HEAP_DOUBLE_CHILD2_EXISTS(p, pDiv)
Definition fxuHeapD.c:32
#define FXU_HEAP_DOUBLE_CHILD1_EXISTS(p, pDiv)
Definition fxuHeapD.c:31
#define FXU_HEAP_DOUBLE_WEIGHT(pDiv)
DECLARATIONS ///.
Definition fxuHeapD.c:28
#define FXU_HEAP_DOUBLE_CHILD2(p, pDiv)
Definition fxuHeapD.c:35
#define FXU_HEAP_DOUBLE_CHILD1(p, pDiv)
Definition fxuHeapD.c:34
Here is the caller graph for this function:

◆ Fxu_HeapDoubleDelete()

void Fxu_HeapDoubleDelete ( Fxu_HeapDouble * p,
Fxu_Double * pDiv )

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

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 250 of file fxuHeapD.c.

251{
253 // put the last entry to the deleted place
254 // decrement the number of entries
255 p->pTree[pDiv->HNum] = p->pTree[p->nItems--];
256 p->pTree[pDiv->HNum]->HNum = pDiv->HNum;
257 // move the top entry down if necessary
258 Fxu_HeapDoubleUpdate( p, p->pTree[pDiv->HNum] );
259 pDiv->HNum = 0;
260}
void Fxu_HeapDoubleUpdate(Fxu_HeapDouble *p, Fxu_Double *pDiv)
Definition fxuHeapD.c:223
#define FXU_HEAP_DOUBLE_ASSERT(p, pDiv)
Definition fxuHeapD.c:36
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Fxu_HeapDoubleGetMax()

Fxu_Double * Fxu_HeapDoubleGetMax ( Fxu_HeapDouble * p)

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

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 291 of file fxuHeapD.c.

292{
293 Fxu_Double * pDiv;
294 if ( p->nItems == 0 )
295 return NULL;
296 // prepare the return value
297 pDiv = p->pTree[1];
298 pDiv->HNum = 0;
299 // put the last entry on top
300 // decrement the number of entries
301 p->pTree[1] = p->pTree[p->nItems--];
302 p->pTree[1]->HNum = 1;
303 // move the top entry down if necessary
304 Fxu_HeapDoubleMoveDn( p, p->pTree[1] );
305 return pDiv;
306}
Here is the caller graph for this function:

◆ Fxu_HeapDoubleInsert()

void Fxu_HeapDoubleInsert ( Fxu_HeapDouble * p,
Fxu_Double * pDiv )

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

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 201 of file fxuHeapD.c.

202{
203 if ( p->nItems == p->nItemsAlloc )
204 Fxu_HeapDoubleResize( p );
205 // put the last entry to the last place and move up
206 p->pTree[++p->nItems] = pDiv;
207 pDiv->HNum = p->nItems;
208 // move the last entry up if necessary
209 Fxu_HeapDoubleMoveUp( p, pDiv );
210}
Here is the caller graph for this function:

◆ Fxu_HeapDoublePrint()

void Fxu_HeapDoublePrint ( FILE * pFile,
Fxu_HeapDouble * p )

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

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 117 of file fxuHeapD.c.

118{
119 Fxu_Double * pDiv;
120 int Counter = 1;
121 int Degree = 1;
122
124 fprintf( pFile, "The contents of the heap:\n" );
125 fprintf( pFile, "Level %d: ", Degree );
127 {
128 assert( Counter == p->pTree[Counter]->HNum );
129 fprintf( pFile, "%2d=%3d ", Counter, FXU_HEAP_DOUBLE_WEIGHT(p->pTree[Counter]) );
130 if ( ++Counter == (1 << Degree) )
131 {
132 fprintf( pFile, "\n" );
133 Degree++;
134 fprintf( pFile, "Level %d: ", Degree );
135 }
136 }
137 fprintf( pFile, "\n" );
138 fprintf( pFile, "End of the heap printout.\n" );
139}
void Fxu_HeapDoubleCheck(Fxu_HeapDouble *p)
Definition fxuHeapD.c:152
Here is the call graph for this function:

◆ Fxu_HeapDoubleReadMax()

Fxu_Double * Fxu_HeapDoubleReadMax ( Fxu_HeapDouble * p)

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

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 273 of file fxuHeapD.c.

274{
275 if ( p->nItems == 0 )
276 return NULL;
277 return p->pTree[1];
278}

◆ Fxu_HeapDoubleReadMaxWeight()

int Fxu_HeapDoubleReadMaxWeight ( Fxu_HeapDouble * p)

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

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 319 of file fxuHeapD.c.

320{
321 if ( p->nItems == 0 )
322 return -1;
323 else
324 return FXU_HEAP_DOUBLE_WEIGHT(p->pTree[1]);
325}
Here is the caller graph for this function:

◆ Fxu_HeapDoubleStart()

Fxu_HeapDouble * Fxu_HeapDoubleStart ( )

FUNCTION DEFINITIONS ///.

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

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 58 of file fxuHeapD.c.

59{
62 memset( p, 0, sizeof(Fxu_HeapDouble) );
63 p->nItems = 0;
64 p->nItemsAlloc = 10000;
65 p->pTree = ABC_ALLOC( Fxu_Double *, p->nItemsAlloc + 1 );
66 p->pTree[0] = NULL;
67 return p;
68}
#define ABC_ALLOC(type, num)
Definition abc_global.h:264
struct FxuHeapDouble Fxu_HeapDouble
Definition fxuInt.h:84
char * memset()
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Fxu_HeapDoubleStop()

void Fxu_HeapDoubleStop ( Fxu_HeapDouble * p)

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

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 99 of file fxuHeapD.c.

100{
101 ABC_FREE( p->pTree );
102 ABC_FREE( p );
103}
#define ABC_FREE(obj)
Definition abc_global.h:267
Here is the caller graph for this function:

◆ Fxu_HeapDoubleUpdate()

void Fxu_HeapDoubleUpdate ( Fxu_HeapDouble * p,
Fxu_Double * pDiv )

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

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 223 of file fxuHeapD.c.

224{
225//printf( "Updating divisor %d.\n", pDiv->Num );
226
228 if ( FXU_HEAP_DOUBLE_PARENT_EXISTS(p,pDiv) &&
230 Fxu_HeapDoubleMoveUp( p, pDiv );
231 else if ( FXU_HEAP_DOUBLE_CHILD1_EXISTS(p,pDiv) &&
233 Fxu_HeapDoubleMoveDn( p, pDiv );
234 else if ( FXU_HEAP_DOUBLE_CHILD2_EXISTS(p,pDiv) &&
236 Fxu_HeapDoubleMoveDn( p, pDiv );
237}
#define FXU_HEAP_DOUBLE_PARENT(p, pDiv)
Definition fxuHeapD.c:33
#define FXU_HEAP_DOUBLE_PARENT_EXISTS(p, pDiv)
Definition fxuHeapD.c:30
Here is the caller graph for this function: