Changeset 5267


Ignore:
Timestamp:
08/16/10 09:30:59 (15 years ago)
Author:
Mathieu Morlighem
Message:

Now use DataSet as Container

Location:
issm/trunk/src/c/objects/Bamg
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/objects/Bamg/QuadTree.cpp

    r5266 r5267  
    9999        /*FUNCTION QuadTree::QuadTree(){{{1*/
    100100        QuadTree::QuadTree() :
    101                 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, QuadTree.cpp/QuadTree)*/
    102 
    103                 lenStorageQuadTreeBox(100), // by default 100 vertices by box
    104101                th(NULL),                   // initial mesh = NULL
    105102                NbQuadTreeBox(0),           // initial number of quadtree boxes = 0
    106103                NbVertices(0){              // initial number of vertices = 0
    107104
    108                         //create lenStorageQuadTreeBox (100) StorageQuadTreeBox elements
    109                         sb  =new StorageQuadTreeBox(lenStorageQuadTreeBox);
    110 
    111                         //root=QuadTreeBox* pointer toward next quadtree box
     105                        /*Create container*/
     106                        boxcontainer=new DataSet();
     107
     108                        /*Create Root, pointer toward the main box*/
    112109                        root=NewQuadTreeBox();
    113110
     
    116113        /*FUNCTION QuadTree::QuadTree(Mesh * t,long nbv){{{1*/
    117114        QuadTree::QuadTree(Mesh * t,long nbv) :
    118                 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, QuadTree.cpp/QuadTree)*/
    119 
    120                 lenStorageQuadTreeBox(t->maxnbv/8+10),
    121115                th(t),
    122116                NbQuadTreeBox(0),
    123117                NbVertices(0)
    124118        {
    125          if (nbv == -1) nbv = t->nbv;
    126          sb  = new StorageQuadTreeBox(lenStorageQuadTreeBox);
     119         /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, QuadTree.cpp/QuadTree)*/
     120
     121         /*Get number of vertices*/
     122         if (nbv==-1) nbv=t->nbv;
     123
     124         /*Create container*/
     125         boxcontainer=new DataSet();
     126
     127         /*Create Root, pointer toward the main box*/
    127128         root=NewQuadTreeBox();
    128          if ( MaxISize <= MaxICoor){
    129                  ISSMERROR("MaxISize <= MaxICoor");
    130          }
    131          for (int i=0;i<nbv;i++)
    132           Add(t->vertices[i]);
     129
     130         /*Check Sizes*/
     131         ISSMASSERT(MaxISize>MaxICoor);
     132
     133         /*Add all vertices of the mesh*/
     134         for (int i=0;i<nbv;i++) Add(t->vertices[i]);
     135
    133136        }
    134137        /*}}}1*/
    135138        /*FUNCTION QuadTree::~QuadTree(){{{1*/
    136139        QuadTree::~QuadTree() {
    137                 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, QuadTree.cpp/~QuadTree)*/
    138 
    139                 delete sb;
    140                 root=0;
     140                delete boxcontainer;
     141                root=NULL;
    141142        }
    142143        /*}}}1*/
     
    491492        QuadTree::QuadTreeBox* QuadTree::NewQuadTreeBox(void){
    492493
    493                 /*if currentbox==lastbox or currentbox>lastbox (we have reach the end of the StorageQuadTreeBox)
    494                  * create a new StorageQuadTreeBox)*/
    495                 if(!(sb->currentbox<sb->lastbox)){
    496                         sb=new StorageQuadTreeBox(lenStorageQuadTreeBox,sb);
    497                 }
    498                 ISSMASSERT(sb && sb->currentbox->nbitems==0);
     494                /*Output*/
     495                QuadTreeBox* newbox=NULL;
     496
     497                /*Create and initialize a new box*/
     498                newbox=new QuadTreeBox;
     499                newbox->nbitems=0;
     500                newbox->b[0]=NULL;
     501                newbox->b[1]=NULL;
     502                newbox->b[2]=NULL;
     503                newbox->b[3]=NULL;
     504
     505                /*Add root to the container*/
     506                boxcontainer->AddObject(newbox);
    499507
    500508                /*Increase counter*/
     
    502510
    503511                /*currentbox now points toward next quadtree box*/
    504                 return sb->currentbox++;
     512                return newbox;
    505513        }/*}}}*/
    506         /*FUNCTION QuadTree::SizeOf{{{1*/
    507         long QuadTree::SizeOf() const {
    508                 return sizeof(QuadTree)+sb->SizeOf();
    509         }
    510         /*}}}1*/
    511514        /*FUNCTION QuadTree::ToClose {{{1*/
    512515        BamgVertex*   QuadTree::ToClose(BamgVertex & v,double seuil,Icoor1 hx,Icoor1 hy){
     
    584587        }
    585588        /*}}}1*/
    586 
    587         /*StorageQuadTreeBox Methods*/
    588         /*FUNCTION QuadTree::StorageQuadTreeBox::StorageQuadTreeBox{{{1*/
    589         QuadTree::StorageQuadTreeBox::StorageQuadTreeBox(long nbquadtreeboxes_in,StorageQuadTreeBox *nextsb_in) {
    590                 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, QuadTree.cpp/StorageQuadTreeBox)*/
    591 
    592                 /*Initilalize variables*/
    593                 nbquadtreeboxes = nbquadtreeboxes_in;       // number of quadtree boxes
    594                 nextsb          = nextsb_in;                // next StorageQuadTreeBox pointer
    595                 boxes   = new QuadTreeBox[nbquadtreeboxes]; // quadtree boxes
    596                 ISSMASSERT(boxes);                          // check allocation
    597 
    598                 /*Initialize all quadtree boxes (empty)*/
    599                 for (int i = 0; i <nbquadtreeboxes;i++){
    600                         boxes[i].nbitems=0;
    601                         boxes[i].b[0]=NULL;
    602                         boxes[i].b[1]=NULL;
    603                         boxes[i].b[2]=NULL;
    604                         boxes[i].b[3]=NULL;
    605                 }
    606 
    607                 currentbox = boxes;
    608                 lastbox  = boxes + nbquadtreeboxes;
    609 
    610         }
    611         /*}}}1*/
    612         /*FUNCTION QuadTree::StorageQuadTreeBox::~StorageQuadTreeBox{{{1*/
    613         QuadTree::StorageQuadTreeBox::~StorageQuadTreeBox(){
    614 
    615                 if(nextsb) delete nextsb;
    616                 delete [] boxes;
    617 
    618         }
    619         /*}}}1*/
    620         /*FUNCTION QuadTree::StorageQuadTreeBox::SizeOf {{{1*/
    621         long  QuadTree::StorageQuadTreeBox::SizeOf() const {
    622 
    623                 return nbquadtreeboxes*sizeof(QuadTreeBox)+sizeof(StorageQuadTreeBox)+ (nextsb?nextsb->SizeOf():0);
    624 
    625         }/*}}}*/
    626589}
  • issm/trunk/src/c/objects/Bamg/QuadTree.h

    r5224 r5267  
    1717                private:
    1818
    19                         class QuadTreeBox{
    20                                 /*A quadtree box contains a maximum of 4 vertices. 4 other quadtree boxes are
    21                                  * created if a fifth vertex is added to the same box. A Quadtree box is therefore
    22                                  * composed of EITHER:
    23                                  * - up to 4 vertices
    24                                  * - 4 "sub" quadtree boxes*/
    25 
     19                        /*A quadtree box contains a maximum of 4 vertices. 4 other quadtree boxes are
     20                         * created if a fifth vertex is added to the same box. A Quadtree box is therefore
     21                         * composed of EITHER:
     22                         * - up to 4 vertices
     23                         * - 4 "sub" quadtree boxes*/
     24                        class QuadTreeBox: public Object{
    2625                                public:
    27 
     26                                        int id;
    2827                                        int nbitems; // number of current vertices in the box
    29 
    3028                                        union{
    3129                                                QuadTreeBox* b[4];
    3230                                                BamgVertex*  v[4];
    3331                                        };
    34                         };
    35 
    36                         class StorageQuadTreeBox{
    37 
    38                                 public:
    39 
    40                                         /*Fields*/
    41                                         QuadTreeBox        *boxes,*currentbox,*lastbox;
    42                                         long                nbquadtreeboxes;
    43                                         StorageQuadTreeBox *nextsb;         // next StorageQuadTreeBox
    44 
    45                                         /*Methods*/
    46                                         StorageQuadTreeBox(long ,StorageQuadTreeBox* =NULL);
    47                                         ~StorageQuadTreeBox();
    48                                         long  SizeOf() const;
     32                                        /*Object functions*/
     33                                        void  Echo(){ISSMERROR("not implemented yet");};
     34                                        void  DeepEcho(){ISSMERROR("not implemented yet");};
     35                                        int   Id(){ISSMERROR("not implemented yet");};
     36                                        int   MyRank(){ISSMERROR("not implemented yet");};
     37                                        void  Marshall(char** pmarshalled_dataset){ISSMERROR("not implemented yet");};
     38                                        int   MarshallSize(){ISSMERROR("not implemented yet");};
     39                                        void  Demarshall(char** pmarshalled_dataset){ISSMERROR("not implemented yet");};
     40                                        int   Enum(){ISSMERROR("not implemented yet");};
     41                                        Object* copy(){ISSMERROR("not implemented yet");};
    4942                        };
    5043
    5144                        /*QuadTree private Fields*/
    52                         StorageQuadTreeBox* sb;
    53                         long                lenStorageQuadTreeBox;
     45                        DataSet* boxcontainer;
    5446
    5547                public:
     
    6961                        QuadTreeBox* NewQuadTreeBox(void);
    7062                        BamgVertex*  ToClose(BamgVertex & ,double ,Icoor1,Icoor1);
    71                         long         SizeOf() const;
    7263                        void         Add( BamgVertex & w);
    7364
Note: See TracChangeset for help on using the changeset viewer.