Institut de Robòtica i Informàtica Industrial
KRD Group

The CuikSuite Project

box_heap.c

Go to the documentation of this file.
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