Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // 27 // Author: Mathieu Karamitros (kara (AT) cenbg 28 // 29 // History: 30 // ----------- 31 // 10 Oct 2011 M.Karamitros created 32 // 33 // ------------------------------------------- 34 35 #include "G4ITBox.hh" 36 37 G4ITBox::G4ITBox() 38 = default; 39 40 G4ITBox::~G4ITBox() 41 { 42 if( fNbIT != 0 ) 43 { 44 G4IT * aIT = fpFirstIT; 45 G4IT * nextIT; 46 47 while( aIT != nullptr ) 48 { 49 nextIT = aIT->GetNext(); 50 delete aIT; 51 aIT = nextIT; 52 } 53 } 54 55 if(fpPreviousBox != nullptr) fpPrevious 56 if(fpNextBox != nullptr) fpNextBox- 57 } 58 59 const G4ITBox & G4ITBox::operator=(const G4ITB 60 { 61 fNbIT = right.fNbIT; 62 fpFirstIT = right.fpFirstIT; 63 fpLastIT = right.fpLastIT; 64 fpPreviousBox = nullptr; 65 fpNextBox = nullptr; 66 return *this; 67 } 68 69 void G4ITBox::Push( G4IT * aIT ) 70 { 71 if( fNbIT == 0 ) 72 { 73 aIT->SetPrevious( nullptr ); 74 fpFirstIT = aIT; 75 } 76 else 77 { 78 fpLastIT->SetNext( aIT ); 79 aIT->SetPrevious( fpLastIT ); 80 } 81 fpLastIT = aIT; 82 fNbIT++; 83 aIT->SetITBox(this); 84 } 85 86 void G4ITBox::Extract( G4IT * aStackedIT ) 87 { 88 if( aStackedIT == fpFirstIT ) 89 { 90 fpFirstIT = aStackedIT->GetNext(); 91 } 92 else if( aStackedIT == fpLastIT ) 93 { 94 fpLastIT = aStackedIT->GetPrevious(); 95 96 } 97 98 if( aStackedIT->GetNext() != nullptr) 99 aStackedIT->GetNext()->SetPrevious(aSt 100 if( aStackedIT->GetPrevious() != nullptr) 101 aStackedIT->GetPrevious()->SetNext(aSt 102 103 aStackedIT->SetNext(nullptr); 104 aStackedIT->SetPrevious(nullptr); 105 aStackedIT->SetITBox(nullptr); 106 fNbIT--; 107 } 108 109 G4IT* G4ITBox::FindIT(const G4Track& track) 110 { 111 if( fNbIT == 0 ) return nullptr; 112 113 G4IT * temp = fpLastIT; 114 G4bool find = false; 115 116 while(!find && temp != nullptr) 117 { 118 if(temp-> GetTrack() == &track) 119 { 120 find = true; 121 break; 122 } 123 temp = temp->GetPrevious(); 124 } 125 126 return temp; 127 } 128 129 const G4IT* G4ITBox::FindIT(const G4Track& tra 130 { 131 if( fNbIT == 0 ) return nullptr; 132 133 const G4IT * temp = fpLastIT; 134 G4bool find = false; 135 136 while(!find && temp != nullptr) 137 { 138 if(temp-> GetTrack() == &track) 139 { 140 find = true; 141 break; 142 } 143 temp = temp->GetPrevious(); 144 } 145 146 return temp; 147 } 148 149 void G4ITBox::TransferTo(G4ITBox * aStack) 150 { 151 G4IT * ITToTransfer = fpFirstIT; 152 while(fNbIT != 0) 153 { 154 Extract(ITToTransfer); 155 aStack->Push(ITToTransfer); 156 ITToTransfer = ITToTransfer->GetNext() 157 } 158 } 159