00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _DGL_HEAP_H_
00023 #define _DGL_HEAP_H_
00024
00025 __BEGIN_DECLS
00026
00027 typedef union _dglHeapData
00028 {
00029 void * pv;
00030 int n;
00031 unsigned int un;
00032 long l;
00033 unsigned long ul;
00034
00035 } dglHeapData_u;
00036
00037
00038 typedef struct _dglHeapNode
00039 {
00040 long key;
00041 dglHeapData_u value;
00042 unsigned char flags;
00043
00044 } dglHeapNode_s;
00045
00046 typedef struct _dglHeap {
00047
00048 long index;
00049 long count;
00050 long block;
00051 dglHeapNode_s * pnode;
00052
00053 } dglHeap_s;
00054
00055 extern void dglHeapInit (
00056 dglHeap_s * pheap
00057 );
00058
00059
00060 typedef void (*dglHeapCancelItem_fn)(dglHeap_s * pheap, dglHeapNode_s * pitem);
00061 extern void dglHeapFree (
00062 dglHeap_s * pheap,
00063 dglHeapCancelItem_fn pfnCancelItem
00064 );
00065
00066 extern int dglHeapInsertMax (
00067 dglHeap_s * pheap ,
00068 long key ,
00069 unsigned char flags ,
00070 dglHeapData_u value
00071 );
00072
00073 extern int dglHeapExtractMax(
00074 dglHeap_s * pheap,
00075 dglHeapNode_s * pnoderet
00076 );
00077
00078 extern int dglHeapInsertMin (
00079 dglHeap_s * pheap ,
00080 long key ,
00081 unsigned char flags ,
00082 dglHeapData_u value
00083 );
00084
00085 extern int dglHeapExtractMin(
00086 dglHeap_s * pheap,
00087 dglHeapNode_s * pnoderet
00088 );
00089
00090 __END_DECLS
00091 #endif