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 // G4NavigationLevelRep inline implementation 26 // G4NavigationLevelRep inline implementation 27 // 27 // 28 // 1 October 1997, J.Apostolakis Initial versi 28 // 1 October 1997, J.Apostolakis Initial version 29 // ------------------------------------------- 29 // ---------------------------------------------------------------------- 30 30 31 extern G4GEOM_DLL G4Allocator<G4NavigationLeve 31 extern G4GEOM_DLL G4Allocator<G4NavigationLevelRep>*& aNavigLevelRepAllocator(); 32 32 33 // Constructors 33 // Constructors 34 //-------------- 34 //-------------- 35 35 36 inline 36 inline 37 G4NavigationLevelRep::G4NavigationLevelRep( G4 37 G4NavigationLevelRep::G4NavigationLevelRep( G4VPhysicalVolume* pPhysVol, 38 const G4 38 const G4AffineTransform& afTransform, 39 EV 39 EVolume volTp, 40 G4 40 G4int repNo ) 41 : sTransform(afTransform), 41 : sTransform(afTransform), 42 sPhysicalVolumePtr(pPhysVol), 42 sPhysicalVolumePtr(pPhysVol), 43 sReplicaNo(repNo), 43 sReplicaNo(repNo), 44 sVolumeType(volTp) 44 sVolumeType(volTp) 45 { 45 { 46 } 46 } 47 47 48 inline 48 inline 49 G4NavigationLevelRep::G4NavigationLevelRep() 49 G4NavigationLevelRep::G4NavigationLevelRep() 50 : sVolumeType(kReplica) 50 : sVolumeType(kReplica) 51 { 51 { 52 } 52 } 53 53 54 inline 54 inline 55 G4NavigationLevelRep::G4NavigationLevelRep( G4 55 G4NavigationLevelRep::G4NavigationLevelRep( G4VPhysicalVolume* pPhysVol, 56 const G4 56 const G4AffineTransform& levelAbove, 57 const G4 57 const G4AffineTransform& relativeCurrent, 58 EV 58 EVolume volTp, 59 G4 59 G4int repNo ) 60 : sPhysicalVolumePtr(pPhysVol), 60 : sPhysicalVolumePtr(pPhysVol), 61 sReplicaNo(repNo), 61 sReplicaNo(repNo), 62 sVolumeType(volTp) 62 sVolumeType(volTp) 63 { 63 { 64 sTransform.InverseProduct( levelAbove, relat 64 sTransform.InverseProduct( levelAbove, relativeCurrent ); 65 } 65 } 66 66 67 inline 67 inline 68 G4NavigationLevelRep::G4NavigationLevelRep( G4 68 G4NavigationLevelRep::G4NavigationLevelRep( G4NavigationLevelRep& right ) 69 : sTransform(right.sTransform), 69 : sTransform(right.sTransform), 70 sPhysicalVolumePtr(right.sPhysicalVolume 70 sPhysicalVolumePtr(right.sPhysicalVolumePtr), 71 sReplicaNo(right.sReplicaNo), 71 sReplicaNo(right.sReplicaNo), 72 sVolumeType(right.sVolumeType) 72 sVolumeType(right.sVolumeType) 73 { 73 { 74 } 74 } 75 75 76 // Destructor 76 // Destructor 77 //-------------- 77 //-------------- 78 78 79 inline 79 inline 80 G4NavigationLevelRep::~G4NavigationLevelRep() 80 G4NavigationLevelRep::~G4NavigationLevelRep() 81 { 81 { 82 #ifdef DEBUG_NAVIG_LEVEL 82 #ifdef DEBUG_NAVIG_LEVEL 83 if(fCountRef>0) 83 if(fCountRef>0) 84 { 84 { 85 G4Exception("G4NavigationLevelRep::~G4Navi 85 G4Exception("G4NavigationLevelRep::~G4NavigationLevelRep()", 86 "GeomVol0003", FatalException, 86 "GeomVol0003", FatalException, 87 "Deletion of data-level object 87 "Deletion of data-level object with positive reference count."); 88 } 88 } 89 #endif 89 #endif 90 } 90 } 91 91 92 // Operators 92 // Operators 93 // -------------- 93 // -------------- 94 94 95 inline 95 inline 96 G4NavigationLevelRep& 96 G4NavigationLevelRep& 97 G4NavigationLevelRep::operator=( const G4Navig 97 G4NavigationLevelRep::operator=( const G4NavigationLevelRep& right ) 98 { 98 { 99 if ( &right != this ) 99 if ( &right != this ) 100 { 100 { 101 sTransform = right.sTransform; 101 sTransform = right.sTransform; 102 sPhysicalVolumePtr = right.sPhysicalVolume 102 sPhysicalVolumePtr = right.sPhysicalVolumePtr; 103 sVolumeType = right.sVolumeType; 103 sVolumeType = right.sVolumeType; 104 sReplicaNo = right.sReplicaNo; 104 sReplicaNo = right.sReplicaNo; 105 fCountRef = right.fCountRef; 105 fCountRef = right.fCountRef; 106 } 106 } 107 return *this; 107 return *this; 108 } 108 } 109 109 110 // Accessors 110 // Accessors 111 // -------------- 111 // -------------- 112 112 113 inline 113 inline 114 G4VPhysicalVolume* 114 G4VPhysicalVolume* 115 G4NavigationLevelRep::GetPhysicalVolume() 115 G4NavigationLevelRep::GetPhysicalVolume() 116 { 116 { 117 return sPhysicalVolumePtr; 117 return sPhysicalVolumePtr; 118 } 118 } 119 119 120 inline 120 inline 121 const G4AffineTransform& 121 const G4AffineTransform& 122 G4NavigationLevelRep::GetTransform() const 122 G4NavigationLevelRep::GetTransform() const 123 { 123 { 124 return sTransform; 124 return sTransform; 125 } 125 } 126 126 127 inline 127 inline 128 const G4AffineTransform* 128 const G4AffineTransform* 129 G4NavigationLevelRep::GetTransformPtr() const 129 G4NavigationLevelRep::GetTransformPtr() const 130 { 130 { 131 return &sTransform; 131 return &sTransform; 132 } 132 } 133 133 134 inline 134 inline 135 EVolume G4NavigationLevelRep::GetVolumeType() 135 EVolume G4NavigationLevelRep::GetVolumeType() const 136 { 136 { 137 return sVolumeType; 137 return sVolumeType; 138 } 138 } 139 139 140 inline 140 inline 141 G4int G4NavigationLevelRep::GetReplicaNo() con 141 G4int G4NavigationLevelRep::GetReplicaNo() const 142 { 142 { 143 return sReplicaNo; 143 return sReplicaNo; 144 } 144 } 145 145 146 inline 146 inline 147 void G4NavigationLevelRep::AddAReference() 147 void G4NavigationLevelRep::AddAReference() 148 { 148 { 149 ++fCountRef; 149 ++fCountRef; 150 } 150 } 151 151 152 inline 152 inline 153 G4bool G4NavigationLevelRep::RemoveAReference( 153 G4bool G4NavigationLevelRep::RemoveAReference() 154 { 154 { 155 return( --fCountRef <= 0 ); 155 return( --fCountRef <= 0 ); 156 } 156 } 157 157 158 // There is no provision that this class is su 158 // There is no provision that this class is subclassed. 159 // If it is subclassed & new data members are 159 // If it is subclassed & new data members are added then the 160 // following "new" & "delete" will fail and gi 160 // following "new" & "delete" will fail and give errors. 161 // 161 // 162 inline 162 inline 163 void* G4NavigationLevelRep::operator new(size_ 163 void* G4NavigationLevelRep::operator new(size_t) 164 { 164 { 165 if (aNavigLevelRepAllocator() == nullptr) 165 if (aNavigLevelRepAllocator() == nullptr) 166 { 166 { 167 aNavigLevelRepAllocator() = new G4Allocato 167 aNavigLevelRepAllocator() = new G4Allocator<G4NavigationLevelRep>; 168 } 168 } 169 return (void *) aNavigLevelRepAllocator()->M 169 return (void *) aNavigLevelRepAllocator()->MallocSingle(); 170 } 170 } 171 171 172 inline 172 inline 173 void G4NavigationLevelRep::operator delete(voi 173 void G4NavigationLevelRep::operator delete(void* aLevelRep) 174 { 174 { 175 aNavigLevelRepAllocator()->FreeSingle((G4Nav 175 aNavigLevelRepAllocator()->FreeSingle((G4NavigationLevelRep *) aLevelRep); 176 } 176 } 177 177