00001 #include "box_heap.h"
00002
00003 #include "interval.h"
00004
00005 #include "boolean.h"
00006 #include "defines.h"
00007
00008 #include <stdio.h>
00009 #include <stdlib.h>
00010 #include <string.h>
00011
00021 void InitHeapOfBoxes(boolean (* LessThan)(void *,void*,void*),void *userData,Theap *h)
00022 {
00023 InitHeap(sizeof(Tbox),CopyBox,DeleteBox,LessThan,userData,FALSE,INIT_NUM_BOXES_IN_HEAP,h);
00024 }
00025
00026 void AddBox2HeapOfBoxes(Tbox *b,Theap *h)
00027 {
00028 AddElement2Heap(NO_UINT,(void *)b,h);
00029 }
00030
00031 double HeapOfBoxesVolume(boolean *used,Theap *h)
00032 {
00033 unsigned int i,n;
00034 double v;
00035
00036 n=HeapSize(h);
00037
00038 v=0;
00039 for(i=0;i<n;i++)
00040 v+=GetBoxVolume(used,(Tbox *)GetHeapElement(i,h));
00041
00042 return(v);
00043 }
00044
00045 double HeapOfBoxesMaxDiagonal(boolean *used,Theap *h)
00046 {
00047 unsigned int i,n;
00048 double d,md;
00049
00050 n=HeapSize(h);
00051
00052 md=0;
00053 for(i=0;i<n;i++)
00054 {
00055 d=GetBoxDiagonal(used,(Tbox *)GetHeapElement(i,h));
00056 if (d>md)
00057 md=d;
00058 }
00059
00060 return(md);
00061 }
00062
00063 double HeapOfBoxesMaxSize(boolean *used,Theap *h)
00064 {
00065 unsigned int i,n;
00066 double s,ms;
00067
00068 n=HeapSize(h);
00069
00070 ms=0;
00071 for(i=0;i<n;i++)
00072 {
00073 s=GetBoxSize(used,(Tbox *)GetHeapElement(i,h));
00074 if (s>ms)
00075 ms=s;
00076 }
00077
00078 return(ms);
00079 }
00080
00081
00082 void Heap2List(Tlist *l,Theap *h)
00083 {
00084 unsigned int i,n;
00085 Tbox b;
00086
00087 InitListOfBoxes(l);
00088
00089 n=HeapSize(h);
00090 for(i=0;i<n;i++)
00091 {
00092 CopyBox(&b,GetHeapElement(i,h));
00093 AddLastElement(&b,l);
00094 }
00095 }
00096
00097 void AddList2Heap(Tlist *l,Theap *h)
00098 {
00099 Titerator i;
00100
00101 InitIterator(&i,l);
00102 First(&i);
00103 while(!EndOfList(&i))
00104 {
00105 AddElement2Heap(NO_UINT,GetCurrent(&i),h);
00106 Advance(&i);
00107 }
00108 }
00109
00110 void PrintHeapOfBoxes(FILE *f,boolean *used,char *heading,Theap *h)
00111 {
00112 unsigned int i,n;
00113
00114 n=HeapSize(h);
00115 for(i=0;i<n;i++)
00116 {
00117 if (heading!=NULL) fprintf(f,"%s ",heading);
00118 fprintf(f,"%u : ",i);
00119 PrintBoxSubset(f,used,NULL,(Tbox *)GetHeapElement(i,h));
00120 }
00121 fflush(f);
00122 }
00123
00124