Changeset 1340 for trunk/source/global/management/include
- Timestamp:
- Nov 5, 2010, 3:45:55 PM (14 years ago)
- Location:
- trunk/source/global/management/include
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/global/management/include/G4Allocator.hh
r1337 r1340 25 25 // 26 26 // 27 // $Id: G4Allocator.hh,v 1.2 0 2010/03/30 08:17:24gcosmo Exp $28 // GEANT4 tag $Name: g eant4-09-04-beta-01$27 // $Id: G4Allocator.hh,v 1.21 2010/04/01 12:43:12 gcosmo Exp $ 28 // GEANT4 tag $Name: global-V09-03-22 $ 29 29 // 30 30 // … … 66 66 67 67 inline void ResetStorage(); 68 // Returns allocated storage to the free store, resets 69 // allocator and page sizes. 68 // Returns allocated storage to the free store, resets allocator. 70 69 // Note: contents in memory are lost using this call ! 71 70 72 71 inline size_t GetAllocatedSize() const; 73 72 // Returns the size of the total memory allocated 73 inline int GetNoPages() const; 74 // Returns the total number of allocated pages 75 inline size_t GetPageSize() const; 76 // Returns the current size of a page 77 inline void IncreasePageSize( unsigned int sz ); 78 // Resets allocator and increases default page size of a given factor 74 79 75 80 public: // without description … … 213 218 214 219 // ************************************************************ 220 // GetNoPages 221 // ************************************************************ 222 // 223 template <class Type> 224 int G4Allocator<Type>::GetNoPages() const 225 { 226 return mem.GetNoPages(); 227 } 228 229 // ************************************************************ 230 // GetPageSize 231 // ************************************************************ 232 // 233 template <class Type> 234 size_t G4Allocator<Type>::GetPageSize() const 235 { 236 return mem.GetPageSize(); 237 } 238 239 // ************************************************************ 240 // IncreasePageSize 241 // ************************************************************ 242 // 243 template <class Type> 244 void G4Allocator<Type>::IncreasePageSize( unsigned int sz ) 245 { 246 ResetStorage(); 247 mem.GrowPageSize(sz); 248 } 249 250 // ************************************************************ 215 251 // operator== 216 252 // ************************************************************ -
trunk/source/global/management/include/G4AllocatorPool.hh
r1337 r1340 25 25 // 26 26 // 27 // $Id: G4AllocatorPool.hh,v 1. 5 2006/06/29 19:01:18 gunterExp $28 // GEANT4 tag $Name: g eant4-09-04-beta-01$27 // $Id: G4AllocatorPool.hh,v 1.7 2010/07/14 10:45:46 gcosmo Exp $ 28 // GEANT4 tag $Name: global-V09-03-22 $ 29 29 // 30 30 // … … 58 58 // Destructor. Return storage to the free store 59 59 60 G4AllocatorPool(const G4AllocatorPool& right);61 // Copy constructor62 63 60 inline void* Alloc(); 64 61 // Allocate one element … … 71 68 // Return storage to the free store 72 69 70 inline int GetNoPages() const; 71 // Return the total number of allocated pages 72 inline unsigned int GetPageSize() const; 73 // Accessor for default page size 74 inline void GrowPageSize( unsigned int factor ); 75 // Increase default page size by a given factor 76 73 77 private: 74 78 79 G4AllocatorPool(const G4AllocatorPool& right); 80 // Provate copy constructor 75 81 G4AllocatorPool& operator= (const G4AllocatorPool& right); 76 82 // Private equality operator … … 97 103 98 104 const unsigned int esize; 99 constunsigned int csize;105 unsigned int csize; 100 106 G4PoolChunk* chunks; 101 107 G4PoolLink* head; … … 142 148 } 143 149 150 // ************************************************************ 151 // GetNoPages 152 // ************************************************************ 153 // 154 inline int 155 G4AllocatorPool::GetNoPages() const 156 { 157 return nchunks; 158 } 159 160 // ************************************************************ 161 // GetPageSize 162 // ************************************************************ 163 // 164 inline unsigned int 165 G4AllocatorPool::GetPageSize() const 166 { 167 return csize; 168 } 169 170 // ************************************************************ 171 // GrowPageSize 172 // ************************************************************ 173 // 174 inline void 175 G4AllocatorPool::GrowPageSize( unsigned int sz ) 176 { 177 csize = (sz) ? sz*csize : csize; 178 } 179 144 180 #endif -
trunk/source/global/management/include/G4FPEDetection.hh
r1337 r1340 25 25 // 26 26 // 27 // $Id: G4FPEDetection.hh,v 1. 2 2006/11/15 16:00:18 gcosmoExp $28 // GEANT4 tag $Name: g eant4-09-04-beta-01$27 // $Id: G4FPEDetection.hh,v 1.5 2010/10/14 17:02:52 mkelsey Exp $ 28 // GEANT4 tag $Name: global-V09-03-22 $ 29 29 // 30 30 // … … 32 32 // 33 33 // ----------------------------------------------------------------------- 34 // This global method should be used on LINUX platforms with gcc compiler35 // for activating NaN detection and FPE signals, and forcing abortion of36 // the application at the time these are detected.34 // This global method should be used on LINUX or MacOSX platforms with gcc 35 // compiler for activating NaN detection and FPE signals, and forcing 36 // abortion of the application at the time these are detected. 37 37 // Meant to be used for debug purposes, can be activated by compiling the 38 38 // "run" module with the flag G4FPE_DEBUG set in the environment. … … 41 41 #ifndef G4FPEDetection_h 42 42 #define G4FPEDetection_h 1 43 44 #include <iostream> 45 #include <stdlib.h> /* abort(), exit() */ 43 46 44 47 #ifdef __linux__ … … 48 51 #include <csignal> 49 52 50 #include <iostream>51 52 53 struct sigaction termaction, oldaction; 53 54 54 void TerminationSignalHandler(int sig)55 static void TerminationSignalHandler(int sig, siginfo_t* sinfo, void* /* context */) 55 56 { 56 57 std::cerr << "ERROR: " << sig; 57 std::string message; 58 switch (SIGFPE) 59 { 58 std::string message = "Floating-point exception (FPE)."; 59 60 if (sinfo) { 61 switch (sinfo->si_code) { 62 #ifdef FPE_NOOP /* BUG: MacOSX uses this instead of INTDIV */ 63 case FPE_NOOP: 64 #endif 60 65 case FPE_INTDIV: 61 66 message = "Integer divide by zero."; … … 85 90 message = "Unknown error."; 86 91 break; 87 } 92 } 93 } 94 88 95 std::cerr << " - " << message << std::endl; 89 96 90 97 ::abort(); 91 98 } 92 99 93 void InvalidOperationDetection()100 static void InvalidOperationDetection() 94 101 { 95 102 std::cout << std::endl … … 106 113 //(void) feenableexcept( FE_UNDERFLOW ); 107 114 108 sigset_t *def_set; 109 def_set=&termaction.sa_mask; 110 sigfillset(def_set); 111 sigdelset(def_set,SIGFPE); 112 termaction.sa_handler=TerminationSignalHandler; 113 termaction.sa_flags=0; 114 sigaction(SIGFPE, &termaction,&oldaction); 115 } 116 #endif 117 #else 118 void InvalidOperationDetection() {;} 119 #endif 120 121 #endif 115 sigdelset(&termaction.sa_mask,SIGFPE); 116 termaction.sa_sigaction=TerminationSignalHandler; 117 termaction.sa_flags=SA_SIGINFO; 118 sigaction(SIGFPE, &termaction, &oldaction); 119 } 120 #endif 121 #elif __MACH__ /* MacOSX */ 122 123 #include <fenv.h> 124 #include <signal.h> 125 126 #define DEFINED_PPC (defined(__ppc__) || defined(__ppc64__)) 127 #define DEFINED_INTEL (defined(__i386__) || defined(__x86_64__)) 128 129 #if DEFINED_PPC 130 131 #define FE_EXCEPT_SHIFT 22 // shift flags right to get masks 132 #define FM_ALL_EXCEPT FE_ALL_EXCEPT >> FE_EXCEPT_SHIFT 133 134 static inline int feenableexcept (unsigned int excepts) 135 { 136 static fenv_t fenv; 137 unsigned int new_excepts = (excepts & FE_ALL_EXCEPT) >> FE_EXCEPT_SHIFT, 138 old_excepts; // all previous masks 139 140 if ( fegetenv (&fenv) ) { return -1; } 141 old_excepts = (fenv & FM_ALL_EXCEPT) << FE_EXCEPT_SHIFT; 142 fenv = (fenv & ~new_excepts) | new_excepts; 143 144 return ( fesetenv (&fenv) ? -1 : old_excepts ); 145 } 146 147 static inline int fedisableexcept (unsigned int excepts) 148 { 149 static fenv_t fenv; 150 unsigned int still_on = ~((excepts & FE_ALL_EXCEPT) >> FE_EXCEPT_SHIFT), 151 old_excepts; // previous masks 152 153 if ( fegetenv (&fenv) ) { return -1; } 154 old_excepts = (fenv & FM_ALL_EXCEPT) << FE_EXCEPT_SHIFT; 155 fenv &= still_on; 156 157 return ( fesetenv (&fenv) ? -1 : old_excepts ); 158 } 159 160 #elif DEFINED_INTEL 161 162 static inline int feenableexcept (unsigned int excepts) 163 { 164 static fenv_t fenv; 165 unsigned int new_excepts = excepts & FE_ALL_EXCEPT, 166 old_excepts; // previous masks 167 168 if ( fegetenv (&fenv) ) { return -1; } 169 old_excepts = fenv.__control & FE_ALL_EXCEPT; 170 171 // unmask 172 // 173 fenv.__control &= ~new_excepts; 174 fenv.__mxcsr &= ~(new_excepts << 7); 175 176 return ( fesetenv (&fenv) ? -1 : old_excepts ); 177 } 178 179 static inline int fedisableexcept (unsigned int excepts) 180 { 181 static fenv_t fenv; 182 unsigned int new_excepts = excepts & FE_ALL_EXCEPT, 183 old_excepts; // all previous masks 184 185 if ( fegetenv (&fenv) ) { return -1; } 186 old_excepts = fenv.__control & FE_ALL_EXCEPT; 187 188 // mask 189 // 190 fenv.__control |= new_excepts; 191 fenv.__mxcsr |= new_excepts << 7; 192 193 return ( fesetenv (&fenv) ? -1 : old_excepts ); 194 } 195 196 #endif /* PPC or INTEL enabling */ 197 198 static void TerminationSignalHandler(int sig, siginfo_t* sinfo, void* /* context */) 199 { 200 std::cerr << "ERROR: " << sig; 201 std::string message = "Floating-point exception (FPE)."; 202 203 if (sinfo) { 204 switch (sinfo->si_code) { 205 #ifdef FPE_NOOP /* BUG: MacOSX uses this instead of INTDIV */ 206 case FPE_NOOP: 207 #endif 208 case FPE_INTDIV: 209 message = "Integer divide by zero."; 210 break; 211 case FPE_INTOVF: 212 message = "Integer overflow."; 213 break; 214 case FPE_FLTDIV: 215 message = "Floating point divide by zero."; 216 break; 217 case FPE_FLTOVF: 218 message = "Floating point overflow."; 219 break; 220 case FPE_FLTUND: 221 message = "Floating point underflow."; 222 break; 223 case FPE_FLTRES: 224 message = "Floating point inexact result."; 225 break; 226 case FPE_FLTINV: 227 message = "Floating point invalid operation."; 228 break; 229 case FPE_FLTSUB: 230 message = "Subscript out of range."; 231 break; 232 default: 233 message = "Unknown error."; 234 break; 235 } 236 } 237 238 std::cerr << " - " << message << std::endl; 239 240 ::abort(); 241 } 242 243 static void InvalidOperationDetection() 244 { 245 struct sigaction termaction, oldaction; 246 247 std::cout << std::endl 248 << " " 249 << "############################################" << std::endl 250 << " " 251 << "!!! WARNING - FPE detection is activated !!!" << std::endl 252 << " " 253 << "############################################" << std::endl; 254 255 feenableexcept ( FE_DIVBYZERO ); 256 feenableexcept ( FE_INVALID ); 257 // fedisableexcept( FE_OVERFLOW ); 258 // fedisableexcept( FE_UNDERFLOW ); 259 260 sigdelset(&termaction.sa_mask,SIGFPE); 261 termaction.sa_sigaction=TerminationSignalHandler; 262 termaction.sa_flags=SA_SIGINFO; 263 sigaction(SIGFPE, &termaction, &oldaction); 264 } 265 #else /* Not Linux, nor MacOSX ... */ 266 267 static void InvalidOperationDetection() {;} 268 269 #endif 270 271 #endif -
trunk/source/global/management/include/G4PhysicsVector.icc
r1337 r1340 25 25 // 26 26 // 27 // $Id: G4PhysicsVector.icc,v 1. 28 2010/05/28 05:13:43 kurasigeExp $28 // GEANT4 tag $Name: g eant4-09-04-beta-01$27 // $Id: G4PhysicsVector.icc,v 1.30 2010/09/20 16:22:56 gcosmo Exp $ 28 // GEANT4 tag $Name: global-V09-03-22 $ 29 29 // 30 30 // -
trunk/source/global/management/include/G4Pow.hh
r1337 r1340 24 24 // ******************************************************************** 25 25 // 26 // $Id: G4Pow.hh,v 1. 5 2010/05/28 08:18:03 vnivanchExp $27 // GEANT4 tag $Name: g eant4-09-04-beta-01$26 // $Id: G4Pow.hh,v 1.7 2010/08/24 08:12:08 gcosmo Exp $ 27 // GEANT4 tag $Name: global-V09-03-22 $ 28 28 // 29 29 // … … 82 82 inline G4double powZ(G4int Z, G4double y); 83 83 inline G4double powA(G4double A, G4double y); 84 G4double powN(G4double x, G4int n); 84 85 85 86 // Fast factorial 86 87 // 87 88 inline G4double factorial(G4int Z); 89 inline G4double logfactorial(G4int Z); 88 90 89 91 private: … … 101 103 G4DataVector lz; 102 104 G4DataVector fact; 105 G4DataVector logfact; 103 106 }; 104 107 … … 190 193 } 191 194 195 inline G4double G4Pow::logfactorial(G4int Z) 196 { 197 return logfact[Z]; 198 } 199 192 200 // ------------------------------------------------------------------- 193 201 -
trunk/source/global/management/include/G4ios.hh
r1337 r1340 25 25 // 26 26 // 27 // $Id: G4ios.hh,v 1.1 0 2006/06/29 19:03:43 gunterExp $28 // GEANT4 tag $Name: g eant4-09-04-beta-01$27 // $Id: G4ios.hh,v 1.12 2010/10/27 07:40:06 gcosmo Exp $ 28 // GEANT4 tag $Name: global-V09-03-22 $ 29 29 // 30 30 // … … 42 42 #include <iostream> 43 43 44 #if defined G4IOS_ EXPORT44 #if defined G4IOS_ALLOC_EXPORT 45 45 extern G4DLLEXPORT std::ostream G4cout; 46 46 extern G4DLLEXPORT std::ostream G4cerr; -
trunk/source/global/management/include/G4strstreambuf.hh
r1337 r1340 25 25 // 26 26 // 27 // $Id: G4strstreambuf.hh,v 1.1 6 2007/11/13 17:35:06 gcosmo Exp $28 // GEANT4 tag $Name: g eant4-09-04-beta-01$27 // $Id: G4strstreambuf.hh,v 1.18 2010/10/27 07:40:06 gcosmo Exp $ 28 // GEANT4 tag $Name: global-V09-03-22 $ 29 29 // ==================================================================== 30 30 // … … 41 41 class G4strstreambuf; 42 42 43 #if defined G4IOS_ EXPORT43 #if defined G4IOS_ALLOC_EXPORT 44 44 extern G4DLLEXPORT G4strstreambuf G4coutbuf; 45 45 extern G4DLLEXPORT G4strstreambuf G4cerrbuf; -
trunk/source/global/management/include/templates.hh
r1337 r1340 25 25 // 26 26 // 27 // $Id: templates.hh,v 1.1 3 2008/08/15 12:15:53gcosmo Exp $28 // GEANT4 tag $Name: g eant4-09-04-beta-01$27 // $Id: templates.hh,v 1.14 2010/07/16 15:48:51 gcosmo Exp $ 28 // GEANT4 tag $Name: global-V09-03-22 $ 29 29 // 30 30 // … … 109 109 #endif 110 110 111 #ifndef INT_MAX /* Max decimal value of a int */ 112 #define INT_MAX std::numeric_limits<int>::max() // 2147483647 113 #endif 114 115 #ifndef INT_MIN /* Min decimal value of a int */ 116 #define INT_MIN std::numeric_limits<int>::min() // -2147483648 117 #endif 118 111 119 //--------------------------------- 112 120
Note: See TracChangeset
for help on using the changeset viewer.