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 // $Id: G4ITBox.cc 64057 2012-10-30 15:04:49Z gcosmo $ 26 // 27 // 27 // Author: Mathieu Karamitros (kara (AT) cenbg 28 // Author: Mathieu Karamitros (kara (AT) cenbg . in2p3 . fr) 28 // 29 // 29 // History: 30 // History: 30 // ----------- 31 // ----------- 31 // 10 Oct 2011 M.Karamitros created 32 // 10 Oct 2011 M.Karamitros created 32 // 33 // 33 // ------------------------------------------- 34 // ------------------------------------------------------------------- 34 35 35 #include "G4ITBox.hh" 36 #include "G4ITBox.hh" 36 37 37 G4ITBox::G4ITBox() << 38 G4ITBox::G4ITBox() : fNbIT(0), fpFirstIT(0), fpLastIT(0), fpPreviousBox(0), fpNextBox(0) 38 = default; << 39 {;} 39 40 40 G4ITBox::~G4ITBox() 41 G4ITBox::~G4ITBox() 41 { 42 { 42 if( fNbIT != 0 ) 43 if( fNbIT != 0 ) 43 { 44 { 44 G4IT * aIT = fpFirstIT; 45 G4IT * aIT = fpFirstIT; 45 G4IT * nextIT; 46 G4IT * nextIT; 46 47 47 while( aIT != nullptr ) << 48 while( aIT != 0 ) 48 { 49 { 49 nextIT = aIT->GetNext(); 50 nextIT = aIT->GetNext(); 50 delete aIT; 51 delete aIT; 51 aIT = nextIT; 52 aIT = nextIT; 52 } 53 } 53 } 54 } 54 55 55 if(fpPreviousBox != nullptr) fpPrevious << 56 if(fpPreviousBox) fpPreviousBox->SetNextBox(fpNextBox) ; 56 if(fpNextBox != nullptr) fpNextBox- << 57 if(fpNextBox) fpNextBox->SetPreviousBox(fpPreviousBox); 57 } 58 } 58 59 59 const G4ITBox & G4ITBox::operator=(const G4ITB 60 const G4ITBox & G4ITBox::operator=(const G4ITBox &right) 60 { 61 { 61 fNbIT = right.fNbIT; 62 fNbIT = right.fNbIT; 62 fpFirstIT = right.fpFirstIT; 63 fpFirstIT = right.fpFirstIT; 63 fpLastIT = right.fpLastIT; 64 fpLastIT = right.fpLastIT; 64 fpPreviousBox = nullptr; << 65 fpPreviousBox = 0; 65 fpNextBox = nullptr; << 66 fpNextBox = 0; 66 return *this; 67 return *this; 67 } 68 } 68 69 69 void G4ITBox::Push( G4IT * aIT ) 70 void G4ITBox::Push( G4IT * aIT ) 70 { 71 { 71 if( fNbIT == 0 ) 72 if( fNbIT == 0 ) 72 { 73 { 73 aIT->SetPrevious( nullptr ); << 74 aIT->SetPrevious( 0 ); 74 fpFirstIT = aIT; 75 fpFirstIT = aIT; 75 } 76 } 76 else 77 else 77 { 78 { 78 fpLastIT->SetNext( aIT ); 79 fpLastIT->SetNext( aIT ); 79 aIT->SetPrevious( fpLastIT ); 80 aIT->SetPrevious( fpLastIT ); 80 } 81 } 81 fpLastIT = aIT; 82 fpLastIT = aIT; 82 fNbIT++; 83 fNbIT++; 83 aIT->SetITBox(this); 84 aIT->SetITBox(this); 84 } 85 } 85 86 86 void G4ITBox::Extract( G4IT * aStackedIT ) 87 void G4ITBox::Extract( G4IT * aStackedIT ) 87 { 88 { 88 if( aStackedIT == fpFirstIT ) 89 if( aStackedIT == fpFirstIT ) 89 { 90 { 90 fpFirstIT = aStackedIT->GetNext(); 91 fpFirstIT = aStackedIT->GetNext(); 91 } 92 } 92 else if( aStackedIT == fpLastIT ) 93 else if( aStackedIT == fpLastIT ) 93 { 94 { 94 fpLastIT = aStackedIT->GetPrevious(); 95 fpLastIT = aStackedIT->GetPrevious(); 95 96 96 } 97 } 97 98 98 if( aStackedIT->GetNext() != nullptr) << 99 if( aStackedIT->GetNext()) 99 aStackedIT->GetNext()->SetPrevious(aSt 100 aStackedIT->GetNext()->SetPrevious(aStackedIT->GetPrevious()); 100 if( aStackedIT->GetPrevious() != nullptr) << 101 if( aStackedIT->GetPrevious()) 101 aStackedIT->GetPrevious()->SetNext(aSt 102 aStackedIT->GetPrevious()->SetNext(aStackedIT->GetNext()); 102 103 103 aStackedIT->SetNext(nullptr); << 104 aStackedIT->SetNext(0); 104 aStackedIT->SetPrevious(nullptr); << 105 aStackedIT->SetPrevious(0); 105 aStackedIT->SetITBox(nullptr); << 106 aStackedIT->SetITBox(0); 106 fNbIT--; 107 fNbIT--; 107 } 108 } 108 109 109 G4IT* G4ITBox::FindIT(const G4Track& track) 110 G4IT* G4ITBox::FindIT(const G4Track& track) 110 { 111 { 111 if( fNbIT == 0 ) return nullptr; << 112 if( fNbIT == 0 ) return 0; 112 113 113 G4IT * temp = fpLastIT; 114 G4IT * temp = fpLastIT; 114 G4bool find = false; 115 G4bool find = false; 115 116 116 while(!find && temp != nullptr) << 117 while(find == false && temp != 0) 117 { 118 { 118 if(temp-> GetTrack() == &track) 119 if(temp-> GetTrack() == &track) 119 { 120 { 120 find = true; 121 find = true; 121 break; 122 break; 122 } 123 } 123 temp = temp->GetPrevious(); 124 temp = temp->GetPrevious(); 124 } 125 } 125 126 126 return temp; 127 return temp; 127 } 128 } 128 129 129 const G4IT* G4ITBox::FindIT(const G4Track& tra 130 const G4IT* G4ITBox::FindIT(const G4Track& track) const 130 { 131 { 131 if( fNbIT == 0 ) return nullptr; << 132 if( fNbIT == 0 ) return 0; 132 133 133 const G4IT * temp = fpLastIT; 134 const G4IT * temp = fpLastIT; 134 G4bool find = false; 135 G4bool find = false; 135 136 136 while(!find && temp != nullptr) << 137 while(find == false && temp != 0) 137 { 138 { 138 if(temp-> GetTrack() == &track) 139 if(temp-> GetTrack() == &track) 139 { 140 { 140 find = true; 141 find = true; 141 break; 142 break; 142 } 143 } 143 temp = temp->GetPrevious(); 144 temp = temp->GetPrevious(); 144 } 145 } 145 146 146 return temp; 147 return temp; 147 } 148 } 148 149 149 void G4ITBox::TransferTo(G4ITBox * aStack) 150 void G4ITBox::TransferTo(G4ITBox * aStack) 150 { 151 { 151 G4IT * ITToTransfer = fpFirstIT; 152 G4IT * ITToTransfer = fpFirstIT; 152 while(fNbIT != 0) << 153 while(fNbIT) 153 { 154 { 154 Extract(ITToTransfer); 155 Extract(ITToTransfer); 155 aStack->Push(ITToTransfer); 156 aStack->Push(ITToTransfer); 156 ITToTransfer = ITToTransfer->GetNext() 157 ITToTransfer = ITToTransfer->GetNext(); 157 } 158 } 158 } 159 } 159 160