Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Static Public Attributes
G4GeomSplitter< T > Class Template Reference

#include <G4GeomSplitter.hh>

Public Member Functions

 G4GeomSplitter ()
 
G4int CreateSubInstance ()
 
void CopyMasterContents ()
 
void SlaveCopySubInstanceArray ()
 
void SlaveInitializeSubInstance ()
 
void SlaveReCopySubInstanceArray ()
 
void FreeSlave ()
 
T * GetOffset ()
 
void UseWorkArea (T *newOffset)
 
T * FreeWorkArea ()
 
void Destroy ()
 

Static Public Attributes

static G4GEOM_DLL G4ThreadLocal T * offset = 0
 

Detailed Description

template<class T>
class G4GeomSplitter< T >

Definition at line 50 of file G4GeomSplitter.hh.

Constructor & Destructor Documentation

template<class T >
G4GeomSplitter< T >::G4GeomSplitter ( )
inline

Definition at line 54 of file G4GeomSplitter.hh.

54 : totalobj(0), totalspace(0), sharedOffset(0) {}

Member Function Documentation

template<class T >
void G4GeomSplitter< T >::CopyMasterContents ( )
inline

Definition at line 75 of file G4GeomSplitter.hh.

References G4GeomSplitter< T >::offset.

Referenced by G4GeomSplitter< T >::SlaveCopySubInstanceArray(), and G4GeomSplitter< T >::SlaveReCopySubInstanceArray().

76  {
77  memcpy(offset, sharedOffset, totalspace * sizeof(T));
78  }
static G4GEOM_DLL G4ThreadLocal T * offset
template<class T >
G4int G4GeomSplitter< T >::CreateSubInstance ( )
inline

Definition at line 56 of file G4GeomSplitter.hh.

References FatalException, G4Exception(), G4GeomSplitter< T >::offset, and realloc().

Referenced by G4LogicalVolume::G4LogicalVolume(), G4PolyconeSide::G4PolyconeSide(), G4PolyhedraSide::G4PolyhedraSide(), G4PVReplica::G4PVReplica(), G4Region::G4Region(), and G4VPhysicalVolume::G4VPhysicalVolume().

59  {
60  totalobj++;
61  if (totalobj > totalspace)
62  {
63  totalspace=totalspace + 512;
64  offset = (T *) realloc(offset, totalspace * sizeof(T));
65  if (offset == 0)
66  {
67  G4Exception("G4GeomSPlitter::CreateSubInstance()",
68  "OutOfMemory", FatalException, "Cannot malloc space!");
69  }
70  sharedOffset = offset;
71  }
72  return (totalobj - 1);
73  }
static G4GEOM_DLL G4ThreadLocal T * offset
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
void * realloc(void *__ptr, size_t __size)
Definition: hjmalloc.cc:103
template<class T >
void G4GeomSplitter< T >::Destroy ( void  )
inline

Definition at line 176 of file G4GeomSplitter.hh.

177  {
178 
179  }
template<class T >
void G4GeomSplitter< T >::FreeSlave ( )
inline

Definition at line 128 of file G4GeomSplitter.hh.

References free(), and G4GeomSplitter< T >::offset.

Referenced by G4GeometryWorkspace::DestroyWorkspace(), and G4SolidsWorkspace::DestroyWorkspace().

130  {
131  if (!offset) { return; }
132  free( offset );
133  offset = 0;
134  }
void free(void *__ptr)
Definition: hjmalloc.cc:140
static G4GEOM_DLL G4ThreadLocal T * offset
template<class T >
T* G4GeomSplitter< T >::FreeWorkArea ( )
inline

Definition at line 164 of file G4GeomSplitter.hh.

References G4GeomSplitter< T >::offset.

165  {
166  // Detach this thread from this Location
167  // The object which calls this method is responsible for it.
168  //
169  T* offsetRet= offset;
170 
171  offset= 0;
172 
173  return offsetRet;
174  }
static G4GEOM_DLL G4ThreadLocal T * offset
template<class T >
T* G4GeomSplitter< T >::GetOffset ( )
inline

Definition at line 139 of file G4GeomSplitter.hh.

References G4GeomSplitter< T >::offset.

Referenced by G4GeometryWorkspace::G4GeometryWorkspace(), and G4SolidsWorkspace::G4SolidsWorkspace().

139 { return offset; }
static G4GEOM_DLL G4ThreadLocal T * offset
template<class T >
void G4GeomSplitter< T >::SlaveCopySubInstanceArray ( )
inline

Definition at line 80 of file G4GeomSplitter.hh.

References G4GeomSplitter< T >::CopyMasterContents(), FatalException, G4Exception(), G4GeomSplitter< T >::offset, and realloc().

Referenced by G4PVReplica::InitialiseWorker(), G4VPhysicalVolume::InitialiseWorker(), G4LogicalVolume::InitialiseWorker(), and G4GeometryWorkspace::InitialiseWorkspace().

83  {
84  if (offset) { return; }
85  offset = (T *) realloc(offset, totalspace * sizeof(T));
86  if (offset == 0)
87  {
88  G4Exception("G4GeomSplitter::SlaveCopySubInstanceArray()",
89  "OutOfMemory", FatalException, "Cannot malloc space!");
90  }
92  }
void CopyMasterContents()
static G4GEOM_DLL G4ThreadLocal T * offset
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
void * realloc(void *__ptr, size_t __size)
Definition: hjmalloc.cc:103
template<class T >
void G4GeomSplitter< T >::SlaveInitializeSubInstance ( )
inline

Definition at line 94 of file G4GeomSplitter.hh.

References FatalException, G4Exception(), G4GeomSplitter< T >::offset, and realloc().

Referenced by G4GeometryWorkspace::InitialiseWorkspace(), G4SolidsWorkspace::InitialiseWorkspace(), and G4GeomSplitter< T >::SlaveReCopySubInstanceArray().

98  {
99  if (offset) { return; }
100  offset = (T *) realloc(offset, totalspace * sizeof(T));
101 
102  if (offset == 0)
103  {
104  G4Exception("G4GeomSplitter::SlaveInitializeSubInstance()",
105  "OutOfMemory", FatalException, "Cannot malloc space!");
106  }
107 
108  for (G4int i = 0 ; i < totalspace ; i++)
109  {
110  offset[i].initialize();
111  }
112  }
static G4GEOM_DLL G4ThreadLocal T * offset
int G4int
Definition: G4Types.hh:78
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
void * realloc(void *__ptr, size_t __size)
Definition: hjmalloc.cc:103
template<class T >
void G4GeomSplitter< T >::SlaveReCopySubInstanceArray ( )
inline

Definition at line 114 of file G4GeomSplitter.hh.

References G4GeomSplitter< T >::CopyMasterContents(), G4Exception(), JustWarning, G4GeomSplitter< T >::offset, and G4GeomSplitter< T >::SlaveInitializeSubInstance().

118  {
119  if (!offset) {
121  G4Exception("G4GeomSPlitter::SlaveReCopySubInstance()",
122  "MissingInitialisation", JustWarning,
123  "Must be called after Initialisation or first Copy.");
124  }
126  }
void CopyMasterContents()
static G4GEOM_DLL G4ThreadLocal T * offset
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
void SlaveInitializeSubInstance()
template<class T >
void G4GeomSplitter< T >::UseWorkArea ( T *  newOffset)
inline

Definition at line 141 of file G4GeomSplitter.hh.

References FatalException, G4Exception(), JustWarning, and G4GeomSplitter< T >::offset.

Referenced by G4GeometryWorkspace::ReleaseWorkspace(), G4SolidsWorkspace::ReleaseWorkspace(), G4SolidsWorkspace::UseWorkspace(), and G4GeometryWorkspace::UseWorkspace().

142  {
143  // Use recycled work area - which was created previously
144  if( offset && offset!=newOffset )
145  {
146  if( newOffset != offset )
147  {
148  G4Exception("G4GeomSplitter::UseWorkspace()",
149  "TwoWorkspaces", FatalException,
150  "Thread already has workspace - cannot use another.");
151  }
152  else
153  {
154  G4Exception("G4GeomSplitter::UseWorkspace()",
155  "TwoWorkspaces", JustWarning,
156  "Thread already has a workspace - trying to set the same again.");
157  }
158  }
159  offset= newOffset;
160  // totalobj= numObjects;
161  // totalspace= numSpace;
162  }
static G4GEOM_DLL G4ThreadLocal T * offset
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41

Field Documentation

template<class T >
G4ThreadLocal G4ReplicaData * G4GeomSplitter< G4ReplicaData >::offset = 0
static

The documentation for this class was generated from the following files: