G4KDNode Class Reference

#include <G4KDNode.hh>


Public Member Functions

 G4KDNode (G4KDTree *, const double *, void *, G4KDNode *, int axis0)
virtual ~G4KDNode ()
G4KDTreeGetTree ()
void SetTree (G4KDTree *)
const double * GetPosition ()
int GetDim ()
int GetAxis ()
void * GetData ()
void SetData (void *)
G4KDNodeGetParent ()
G4KDNodeGetLeft ()
G4KDNodeGetRight ()
G4KDNodeFindParent (const double *x0)
G4KDNodeInsert (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
G4KDTreefTree
G4KDNodefLeft
G4KDNodefRight
G4KDNodefParent


Detailed Description

G4KDNode stores one entity in G4KDTree This class is for internal use only

Definition at line 50 of file G4KDNode.hh.


Constructor & Destructor Documentation

G4KDNode::G4KDNode ( G4KDTree ,
const double *  ,
void *  ,
G4KDNode ,
int  axis0 
)

Definition at line 71 of file G4KDNode.cc.

References fAxis, fSide, and SetPosition().

Referenced by Insert().

00072                                                :
00073     fPosition(0), fData(data), fTree(tree),
00074     fLeft(0), fRight(0), fParent(parent)
00075 {
00076     fSide = 0;
00077     fAxis = axis;
00078     SetPosition(position);
00079 }

G4KDNode::~G4KDNode (  )  [virtual]

Definition at line 107 of file G4KDNode.cc.

References fPosition.

00108 {
00109     delete[] fPosition;
00110 }


Member Function Documentation

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 (  ) 

Definition at line 112 of file G4KDNode.cc.

References fTree, and G4KDTree::GetDim().

00113 {
00114     if(fTree)
00115         return fTree->GetDim();
00116     else
00117         return -1;
00118 }

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]

Definition at line 147 of file G4KDNode.hh.

References fTree.

00148 {
00149     return fTree;
00150 }

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  ) 

Definition at line 215 of file G4KDNode.cc.

References fPosition, and Insert().

00216 {
00217     return Insert(newNode, newNode->fPosition);
00218 }

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]

Definition at line 152 of file G4KDNode.hh.

References fTree.

00153 {
00154     fTree = tree;
00155 }


Field Documentation

int G4KDNode::fAxis [protected]

Definition at line 93 of file G4KDNode.hh.

Referenced by FindParent(), G4KDNode(), GetAxis(), and Insert().

void* G4KDNode::fData [protected]

Definition at line 94 of file G4KDNode.hh.

Referenced by GetData(), InactiveNode(), and SetData().

G4KDNode* G4KDNode::fLeft [protected]

Definition at line 102 of file G4KDNode.hh.

Referenced by FindParent(), GetLeft(), Insert(), PullSubTree(), and RetrieveNodeList().

G4KDNode * G4KDNode::fParent [protected]

Definition at line 102 of file G4KDNode.hh.

Referenced by GetParent(), Insert(), and PullSubTree().

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]

Definition at line 95 of file G4KDNode.hh.

Referenced by G4KDNode(), Insert(), and PullSubTree().

G4KDTree* G4KDNode::fTree [protected]

Definition at line 101 of file G4KDNode.hh.

Referenced by GetDim(), GetTree(), Insert(), PullSubTree(), SetPosition(), and SetTree().


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:52:21 2013 for Geant4 by  doxygen 1.4.7