int BoxTreeInnerNode::divide(int p_depth) { if (m_Boxes.empty()) return 0; Vector3D center; recalcBounds(center); int longest=createSons(center); BoxTreeInnerNode* f=static_cast<BoxTreeInnerNode*>(m_First); BoxTreeInnerNode* s=static_cast<BoxTreeInnerNode*>(m_Second); int depth=1; unsigned int bnum=m_Boxes.size(); #ifdef _DEBUG int fnum=0; #endif for(unsigned i=0;i<bnum;i++) { BoxedTriangle* bt=m_Boxes[i]; if (bt->center[longest]<center[longest]) { f->m_Boxes.push_back(bt); #ifdef _DEBUG fnum++; #endif } else { s->m_Boxes.push_back(bt); } } int b1num=f->m_Boxes.size(); int b2num=s->m_Boxes.size(); if ((b1num==bnum || b2num==bnum))// && p_depth>m_logdepth) { delete m_First; m_First=NULL; delete m_Second; m_Second=NULL; return depth+1; } m_Boxes.clear(); if (f->m_Boxes.empty()) { delete m_First; m_First=NULL; } else if (f->m_Boxes.size()==1) { BoxedTriangle* bt=f->m_Boxes.back(); delete m_First; m_OwnFirst=false; m_First=bt; } else depth=f->divide(p_depth+1); if (s->m_Boxes.empty()) { delete m_Second; m_Second=NULL; } else if (s->m_Boxes.size()==1) { BoxedTriangle* bt=s->m_Boxes.back(); delete m_Second; m_OwnSecond=false; m_Second=bt; } else depth=Max(depth,s->divide(p_depth+1)); return depth+1; }
int main(int argc, char *argv[]) { arr = (int*)calloc(arrSIZE, sizeof(int)); draws = (int*)calloc(2, sizeof(int)); time_t t; srand((unsigned) time(&t)); shmidArray = sharedMemoArr(arrSIZE, 'S'); shmidDraws = sharedMemoDraws(2, 'T'); shmidFlag = sharedMemoFlag('R'); shmidOutPlayer1 = sharedMemoOutPlayer1(2, 'K'); shmidOutPlayer2 = sharedMemoOutPlayer2(2, 'E'); // freeSharedMemo(); initializeBoard(arr);//Initialize board with players 1 and 2. printArray(arr, arrSIZE); createSons(); freeSharedMemo(); return 0; }