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