00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "G4NavigationLevel.hh"
00034
00035 G4Allocator<G4NavigationLevel> aNavigationLevelAllocator;
00036
00037 G4NavigationLevel::G4NavigationLevel( G4VPhysicalVolume* pPhysVol,
00038 const G4AffineTransform& afTransform,
00039 EVolume volTp,
00040 G4int repNo )
00041 {
00042 fLevelRep = new G4NavigationLevelRep( pPhysVol, afTransform, volTp, repNo );
00043 }
00044
00045 G4NavigationLevel::G4NavigationLevel( G4VPhysicalVolume* pPhysVol,
00046 const G4AffineTransform& levelAbove,
00047 const G4AffineTransform& relativeCurrent,
00048 EVolume volTp,
00049 G4int repNo )
00050 {
00051 fLevelRep = new G4NavigationLevelRep( pPhysVol,
00052 levelAbove,
00053 relativeCurrent,
00054 volTp,
00055 repNo );
00056 }
00057
00058 G4NavigationLevel::G4NavigationLevel()
00059 {
00060 fLevelRep = new G4NavigationLevelRep();
00061 }
00062
00063 G4NavigationLevel::G4NavigationLevel(const G4NavigationLevel& right)
00064 : fLevelRep( right.fLevelRep )
00065 {
00066 fLevelRep->AddAReference();
00067 }
00068
00069 G4NavigationLevel::~G4NavigationLevel()
00070 {
00071 if( fLevelRep->RemoveAReference() ) { delete fLevelRep; }
00072 }
00073
00074 G4NavigationLevel& G4NavigationLevel::operator=(const G4NavigationLevel &right)
00075 {
00076 if ( &right != this )
00077 {
00078 right.fLevelRep->AddAReference();
00079 if( fLevelRep->RemoveAReference() ) { delete fLevelRep; }
00080 fLevelRep = right.fLevelRep;
00081 }
00082 return *this;
00083 }