Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 /* 27 * G4ManyFastLists.icc 28 * 29 * Created on: 17 nov. 2014 30 * Author: kara 31 */ 32 33 #ifndef G4MANYFASTLISTS_ICC_ 34 #define G4MANYFASTLISTS_ICC_ 35 36 //____________________________________________________________ 37 // 38 // G4TrackManyLists 39 //____________________________________________________________ 40 template<class OBJECT> 41 void G4ManyFastLists<OBJECT>::pop(OBJECT* __track) 42 { 43 // Ver 1 44 G4FastList<OBJECT>::Pop(__track); 45 // G4FastListNode* __trackListNode = G4FastList<OBJECT>::GetNode(__track); 46 // G4FastList<OBJECT>* __trackList = G4FastList<OBJECT>::GetTrackList(__trackListNode); 47 // if(__trackList) __trackList->pop(__trackListNode); 48 49 //Ver 2 50 // G4FastList<OBJECT>* __list = G4FastList<OBJECT>::GetTrackList(track); 51 // if(__list) __list->pop(track); 52 53 // Ver 3 54 // G4FastListNode* __node = GetIT(track)->GetTrackListNode(); 55 // __node->fListRef->fpTrackList->pop(track); 56 } 57 58 template<class OBJECT> 59 G4ManyFastLists_iterator<OBJECT> G4ManyFastLists_iterator<OBJECT>::UpdateToNextValidList() 60 { 61 62 // G4cout << "G4TrackManyList_iterator::UpdateToNextValidList" << G4endl; 63 64 if (fCurrentListIt == fLists->end()) // check validity 65 { 66 HasReachedEnd(); 67 return *this; 68 } 69 70 fIterator = (*fCurrentListIt)->end(); 71 fCurrentListIt++; 72 73 if (fCurrentListIt == fLists->end()) // check validity 74 { 75 HasReachedEnd(); 76 return *this; 77 } 78 79 fIterator = (*fCurrentListIt)->begin(); 80 81 while (fCurrentListIt != fLists->end() 82 && 83 // ( 84 fIterator == (*fCurrentListIt)->end() 85 // || (*fCurrentListIt)->empty() 86 // || fIterator.GetNode() == 0 || fIterator.GetNode()->GetObject() == 0) 87 88 ) 89 { 90 // G4cout << "while" << G4endl; 91 fIterator = (*fCurrentListIt)->end(); 92 fCurrentListIt++; 93 if (fCurrentListIt == fLists->end()) 94 { 95 // G4cout << "return here" << G4endl; 96 HasReachedEnd(); 97 return *this; 98 } 99 fIterator = (*fCurrentListIt)->begin(); 100 } 101 102 if (fCurrentListIt == fLists->end()) 103 { 104 HasReachedEnd(); 105 } 106 107 // assert(fIterator.GetNode()); 108 // assert(fIterator.GetNode()->GetObject()); 109 110 return *this; 111 } 112 113 template<class OBJECT> 114 G4ManyFastLists_iterator<OBJECT>& 115 G4ManyFastLists_iterator<OBJECT>::operator++() 116 { 117 if (fCurrentListIt == fLists->end()) 118 { 119 HasReachedEnd(); 120 return *this; 121 } 122 123 fIterator++; 124 125 if (fIterator == (*fCurrentListIt)->end()) 126 { 127 UpdateToNextValidList(); 128 } 129 130 return *this; 131 } 132 133 #endif /* G4MANYFASTLISTS_ICC_ */ 134