28#define FXU_HEAP_DOUBLE_WEIGHT(pDiv) ((pDiv)->Weight)
29#define FXU_HEAP_DOUBLE_CURRENT(p, pDiv) ((p)->pTree[(pDiv)->HNum])
30#define FXU_HEAP_DOUBLE_PARENT_EXISTS(p, pDiv) ((pDiv)->HNum > 1)
31#define FXU_HEAP_DOUBLE_CHILD1_EXISTS(p, pDiv) (((pDiv)->HNum << 1) <= p->nItems)
32#define FXU_HEAP_DOUBLE_CHILD2_EXISTS(p, pDiv) ((((pDiv)->HNum << 1)+1) <= p->nItems)
33#define FXU_HEAP_DOUBLE_PARENT(p, pDiv) ((p)->pTree[(pDiv)->HNum >> 1])
34#define FXU_HEAP_DOUBLE_CHILD1(p, pDiv) ((p)->pTree[(pDiv)->HNum << 1])
35#define FXU_HEAP_DOUBLE_CHILD2(p, pDiv) ((p)->pTree[((pDiv)->HNum << 1)+1])
36#define FXU_HEAP_DOUBLE_ASSERT(p, pDiv) assert( (pDiv)->HNum >= 1 && (pDiv)->HNum <= p->nItemsAlloc )
64 p->nItemsAlloc = 10000;
124 fprintf( pFile,
"The contents of the heap:\n" );
125 fprintf( pFile,
"Level %d: ", Degree );
128 assert( Counter ==
p->pTree[Counter]->HNum );
130 if ( ++Counter == (1 << Degree) )
132 fprintf( pFile,
"\n" );
134 fprintf( pFile,
"Level %d: ", Degree );
137 fprintf( pFile,
"\n" );
138 fprintf( pFile,
"End of the heap printout.\n" );
175 int Weight1, Weight2;
180 assert( Weight1 >= Weight2 );
186 assert( Weight1 >= Weight2 );
203 if (
p->nItems ==
p->nItemsAlloc )
204 Fxu_HeapDoubleResize(
p );
206 p->pTree[++
p->nItems] = pDiv;
207 pDiv->
HNum =
p->nItems;
209 Fxu_HeapDoubleMoveUp(
p, pDiv );
230 Fxu_HeapDoubleMoveUp(
p, pDiv );
233 Fxu_HeapDoubleMoveDn(
p, pDiv );
236 Fxu_HeapDoubleMoveDn(
p, pDiv );
255 p->pTree[pDiv->
HNum] =
p->pTree[
p->nItems--];
275 if (
p->nItems == 0 )
294 if (
p->nItems == 0 )
301 p->pTree[1] =
p->pTree[
p->nItems--];
302 p->pTree[1]->HNum = 1;
304 Fxu_HeapDoubleMoveDn(
p,
p->pTree[1] );
321 if (
p->nItems == 0 )
347 Temp = (*pDiv1)->
HNum;
348 (*pDiv1)->HNum = (*pDiv2)->HNum;
349 (*pDiv2)->HNum = Temp;
372 Fxu_HeapDoubleSwap( ppDiv, ppPar );
393 Fxu_Double ** ppChild1, ** ppChild2, ** ppDiv;
414 Fxu_HeapDoubleSwap( ppDiv, ppChild1 );
420 Fxu_HeapDoubleSwap( ppDiv, ppChild2 );
435 Fxu_HeapDoubleSwap( ppDiv, ppChild1 );
#define ABC_ALLOC(type, num)
#define ABC_REALLOC(type, obj, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
#define FXU_HEAP_DOUBLE_CHILD2_EXISTS(p, pDiv)
void Fxu_HeapDoubleUpdate(Fxu_HeapDouble *p, Fxu_Double *pDiv)
#define FXU_HEAP_DOUBLE_CHILD1_EXISTS(p, pDiv)
void Fxu_HeapDoubleStop(Fxu_HeapDouble *p)
void Fxu_HeapDoublePrint(FILE *pFile, Fxu_HeapDouble *p)
#define FXU_HEAP_DOUBLE_PARENT(p, pDiv)
#define FXU_HEAP_DOUBLE_WEIGHT(pDiv)
DECLARATIONS ///.
Fxu_HeapDouble * Fxu_HeapDoubleStart()
FUNCTION DEFINITIONS ///.
void Fxu_HeapDoubleCheckOne(Fxu_HeapDouble *p, Fxu_Double *pDiv)
#define FXU_HEAP_DOUBLE_ASSERT(p, pDiv)
void Fxu_HeapDoubleCheck(Fxu_HeapDouble *p)
int Fxu_HeapDoubleReadMaxWeight(Fxu_HeapDouble *p)
#define FXU_HEAP_DOUBLE_PARENT_EXISTS(p, pDiv)
#define FXU_HEAP_DOUBLE_CURRENT(p, pDiv)
void Fxu_HeapDoubleDelete(Fxu_HeapDouble *p, Fxu_Double *pDiv)
void Fxu_HeapDoubleInsert(Fxu_HeapDouble *p, Fxu_Double *pDiv)
#define FXU_HEAP_DOUBLE_CHILD2(p, pDiv)
#define FXU_HEAP_DOUBLE_CHILD1(p, pDiv)
Fxu_Double * Fxu_HeapDoubleGetMax(Fxu_HeapDouble *p)
Fxu_Double * Fxu_HeapDoubleReadMax(Fxu_HeapDouble *p)
struct FxuHeapDouble Fxu_HeapDouble
struct FxuDouble Fxu_Double
#define Fxu_HeapDoubleForEachItem(Heap, Div)