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