#include <G4KDNode.hh>
Public Member Functions | |
G4KDNode (G4KDTree *, const double *, void *, G4KDNode *, int axis0) | |
virtual | ~G4KDNode () |
G4KDTree * | GetTree () |
void | SetTree (G4KDTree *) |
const double * | GetPosition () |
int | GetDim () |
int | GetAxis () |
void * | GetData () |
void | SetData (void *) |
G4KDNode * | GetParent () |
G4KDNode * | GetLeft () |
G4KDNode * | GetRight () |
G4KDNode * | FindParent (const double *x0) |
G4KDNode * | Insert (const double *p, void *data) |
int | Insert (G4KDNode *newNode, double *p) |
int | Insert (G4KDNode *newNode, const double &x, const double &y, const double &z) |
int | Insert (G4KDNode *newNode) |
void | InactiveNode () |
void | PullSubTree () |
void | RetrieveNodeList (std::list< G4KDNode * > &node_list) |
Protected Member Functions | |
int | SetPosition (const double *newposition) |
Protected Attributes | |
double * | fPosition |
int | fAxis |
void * | fData |
int | fSide |
G4KDTree * | fTree |
G4KDNode * | fLeft |
G4KDNode * | fRight |
G4KDNode * | fParent |
Definition at line 50 of file G4KDNode.hh.
G4KDNode::~G4KDNode | ( | ) | [virtual] |
Definition at line 107 of file G4KDNode.cc.
References fPosition.
00108 { 00109 delete[] fPosition; 00110 }
G4KDNode * G4KDNode::FindParent | ( | const double * | x0 | ) |
Definition at line 138 of file G4KDNode.cc.
References fAxis, fLeft, fPosition, and fRight.
Referenced by Insert().
00139 { 00140 G4KDNode* aParent = 0 ; 00141 G4KDNode* next = this ; 00142 int split = -1 ; 00143 while(next) 00144 { 00145 split = next->fAxis ; 00146 aParent = next ; 00147 00148 if(x0[split] > next->fPosition[split]) 00149 next = next->fRight ; 00150 else 00151 next = next->fLeft ; 00152 } 00153 return aParent ; 00154 }
int G4KDNode::GetAxis | ( | ) | [inline] |
Definition at line 112 of file G4KDNode.hh.
References fAxis.
Referenced by G4KDTree::__NearestInRange(), G4KDTree::__NearestToNode(), and G4KDTree::__NearestToPosition().
00113 { 00114 return fAxis; 00115 }
void * G4KDNode::GetData | ( | ) | [inline] |
Definition at line 117 of file G4KDNode.hh.
References fData.
Referenced by G4KDTree::__Clear_Rec(), G4KDTree::__NearestToNode(), G4KDTree::__NearestToPosition(), and GetData().
00118 { 00119 return fData; 00120 }
int G4KDNode::GetDim | ( | ) |
G4KDNode * G4KDNode::GetLeft | ( | ) | [inline] |
Definition at line 137 of file G4KDNode.hh.
References fLeft.
Referenced by G4KDTree::__Clear_Rec(), G4KDTree::__NearestInRange(), G4KDTree::__NearestToNode(), and G4KDTree::__NearestToPosition().
00138 { 00139 return fLeft; 00140 }
G4KDNode * G4KDNode::GetParent | ( | ) | [inline] |
Definition at line 132 of file G4KDNode.hh.
References fParent.
00133 { 00134 return fParent; 00135 }
const double * G4KDNode::GetPosition | ( | ) | [inline] |
Definition at line 127 of file G4KDNode.hh.
References fPosition.
Referenced by G4KDTree::__NearestInRange(), G4KDTree::__NearestToNode(), G4KDTree::__NearestToPosition(), GetNodePosition(), G4KDTree::Nearest(), and G4KDTree::NearestInRange().
00128 { 00129 return fPosition; 00130 }
G4KDNode * G4KDNode::GetRight | ( | ) | [inline] |
Definition at line 142 of file G4KDNode.hh.
References fRight.
Referenced by G4KDTree::__Clear_Rec(), G4KDTree::__NearestInRange(), G4KDTree::__NearestToNode(), and G4KDTree::__NearestToPosition().
00143 { 00144 return fRight; 00145 }
G4KDTree * G4KDNode::GetTree | ( | ) | [inline] |
void G4KDNode::InactiveNode | ( | ) |
Definition at line 120 of file G4KDNode.cc.
References fData.
Referenced by InactiveNode().
00121 { 00122 fData = 0 ; 00123 }
int G4KDNode::Insert | ( | G4KDNode * | newNode | ) |
int G4KDNode::Insert | ( | G4KDNode * | newNode, | |
const double & | x, | |||
const double & | y, | |||
const double & | z | |||
) |
Definition at line 206 of file G4KDNode.cc.
References Insert().
00207 { 00208 double p[3] ; 00209 p[0] = x; 00210 p[1] = y ; 00211 p[2] = z ; 00212 return Insert(newNode, p); 00213 }
int G4KDNode::Insert | ( | G4KDNode * | newNode, | |
double * | p | |||
) |
Definition at line 180 of file G4KDNode.cc.
References fAxis, G4KDTree::fDim, FindParent(), fLeft, fParent, fPosition, fRight, fSide, and fTree.
00181 { 00182 G4KDNode* aParent = FindParent(p); 00183 // TODO check p == aParent->pos 00184 // Exception 00185 00186 newNode->fAxis = aParent->fAxis +1 < fTree->fDim? aParent->fAxis+1:0; 00187 newNode->fParent = aParent ; 00188 00189 if(p[aParent->fAxis] > aParent->fPosition[aParent->fAxis]) 00190 { 00191 aParent->fRight = newNode ; 00192 newNode->fSide = 1 ; 00193 } 00194 else 00195 { 00196 aParent->fLeft = newNode ; 00197 newNode->fSide = -1 ; 00198 } 00199 00200 newNode->fRight = 0; 00201 newNode->fLeft = 0; 00202 00203 return 0 ; 00204 }
G4KDNode * G4KDNode::Insert | ( | const double * | p, | |
void * | data | |||
) |
Definition at line 156 of file G4KDNode.cc.
References fAxis, G4KDTree::fDim, FindParent(), fLeft, fPosition, fRight, fSide, fTree, and G4KDNode().
Referenced by G4KDTree::Insert(), and Insert().
00157 { 00158 G4KDNode* aParent = FindParent(p); 00159 // TODO check p == aParent->pos 00160 // Exception 00161 00162 G4KDNode* newNode = new G4KDNode(fTree, p, data, aParent, 00163 aParent->fAxis +1 < fTree->fDim? aParent->fAxis+1:0); 00164 00165 if(p[aParent->fAxis] > aParent->fPosition[aParent->fAxis]) 00166 { 00167 aParent->fRight = newNode ; 00168 newNode->fSide = 1 ; 00169 } 00170 else 00171 { 00172 aParent->fLeft = newNode ; 00173 newNode->fSide = -1 ; 00174 } 00175 00176 return newNode ; 00177 }
void G4KDNode::PullSubTree | ( | ) |
Definition at line 220 of file G4KDNode.cc.
References fLeft, fParent, fRight, fSide, and fTree.
00221 { 00222 if(fParent) 00223 { 00224 if(fSide == -1) 00225 { 00226 fParent->fLeft = 0; 00227 } 00228 else 00229 fParent->fRight = 0; 00230 } 00231 if(fLeft) fLeft -> PullSubTree(); 00232 if(fRight) fRight-> PullSubTree(); 00233 00234 fParent = 0 ; 00235 fRight = 0 ; 00236 fLeft = 0 ; 00237 fTree = 0 ; 00238 }
void G4KDNode::RetrieveNodeList | ( | std::list< G4KDNode * > & | node_list | ) |
Definition at line 240 of file G4KDNode.cc.
References fLeft, fRight, and RetrieveNodeList().
Referenced by RetrieveNodeList().
00241 { 00242 output.push_back(this); 00243 00244 if(fLeft) 00245 fLeft->RetrieveNodeList(output); 00246 00247 if(fRight) 00248 fRight->RetrieveNodeList(output); 00249 }
void G4KDNode::SetData | ( | void * | ) | [inline] |
Definition at line 122 of file G4KDNode.hh.
References fData.
Referenced by G4KDTree::__Clear_Rec().
00123 { 00124 fData = data; 00125 }
int G4KDNode::SetPosition | ( | const double * | newposition | ) | [protected] |
Definition at line 125 of file G4KDNode.cc.
References G4KDTree::fDim, fPosition, and fTree.
Referenced by G4KDNode().
00126 { 00127 if(!newposition) return -1; 00128 if(!fPosition) 00129 { 00130 fPosition = new double[fTree->fDim]; 00131 } 00132 00133 memcpy(fPosition, newposition, fTree->fDim * sizeof(double)); 00134 00135 return 0; 00136 }
void G4KDNode::SetTree | ( | G4KDTree * | ) | [inline] |
int G4KDNode::fAxis [protected] |
Definition at line 93 of file G4KDNode.hh.
Referenced by FindParent(), G4KDNode(), GetAxis(), and Insert().
void* G4KDNode::fData [protected] |
G4KDNode* G4KDNode::fLeft [protected] |
Definition at line 102 of file G4KDNode.hh.
Referenced by FindParent(), GetLeft(), Insert(), PullSubTree(), and RetrieveNodeList().
G4KDNode * G4KDNode::fParent [protected] |
double* G4KDNode::fPosition [protected] |
Definition at line 92 of file G4KDNode.hh.
Referenced by FindParent(), GetPosition(), Insert(), SetPosition(), and ~G4KDNode().
G4KDNode * G4KDNode::fRight [protected] |
Definition at line 102 of file G4KDNode.hh.
Referenced by FindParent(), GetRight(), Insert(), PullSubTree(), and RetrieveNodeList().
int G4KDNode::fSide [protected] |
G4KDTree* G4KDNode::fTree [protected] |
Definition at line 101 of file G4KDNode.hh.
Referenced by GetDim(), GetTree(), Insert(), PullSubTree(), SetPosition(), and SetTree().