Geant4 Cross Reference |
1 /* 2 # <<BEGIN-copyright>> 3 # <<END-copyright>> 4 */ 5 6 #include <stdio.h> 7 #include <stdlib.h> 8 #include <cmath> 9 10 #include "nf_utilities.h" 11 12 #ifdef WIN32 13 #include <float.h> 14 #define is_nan(a) _isnan(a) 15 /*#define INFINITY (DBL_MAX+DBL_MAX)*/ 16 /*#define NAN (INFINITY-INFINITY)*/ 17 #else 18 #define is_nan(a) std::isnan(a) 19 #endif 20 21 #if defined __cplusplus 22 namespace GIDI { 23 using namespace GIDI; 24 #endif 25 26 static const char Okay_message[] = "all is okay"; 27 static const char mallocError_message[] = "could not allocate memory"; 28 static const char insufficientMemory_message[] = "user's memory is too small to handle data"; 29 static const char badIndex_message[] = "bad index"; 30 static const char XNotAscending_message[] = "x values are not ascending"; 31 static const char badIndexForX_message[] = "index not correct for x value"; 32 static const char XOutsideDomain_message[] = "x value not in domain"; 33 static const char invalidInterpolation_message[] = "bad x,y values for interpolation"; 34 static const char badSelf_message[] = "source object has bad status value"; 35 static const char divByZero_message[] = "division by zero"; 36 static const char unsupportedInterpolation_message[] = "unsupported interpolation"; 37 static const char unsupportedInterpolationConversion_message[] = "unsupported interpolation conversion"; 38 static const char empty_message[] = "empty instance"; 39 static const char tooFewPoints_message[] = "too few points in instance"; 40 static const char notMutualDomian_message[] = "domains are not mutual"; 41 static const char unknownStatus_message[] = "unknown (i.e., invalid) status value"; 42 static const char badInput_message[] = "bad input to function"; 43 static const char badNorm_message[] = "bad norm"; 44 static const char badIntegrationInput_message[] = "bad integration input"; 45 static const char otherInterpolation_message[] = "other integration not supported"; 46 static const char failedToConverge_message[] = "failed to converge"; 47 static const char oddNumberOfValues_message[] = "odd number of inputted values"; 48 49 static int nfu_debugging = 0; 50 51 /* 52 ************************************************************ 53 */ 54 double nfu_getNAN( void ) { 55 56 return( NAN ); 57 } 58 /* 59 ************************************************************ 60 */ 61 int nfu_isNAN( double d ) { 62 63 return( is_nan( d ) ); 64 } 65 /* 66 ************************************************************ 67 */ 68 double nfu_getInfinity( double sign ) { 69 70 if( sign < 0 ) return( -INFINITY ); 71 return( INFINITY ); 72 } 73 /* 74 ************************************************************ 75 */ 76 const char *nfu_statusMessage( nfu_status status ) { 77 78 switch( status ) { 79 case nfu_Okay : return( Okay_message ); 80 case nfu_mallocError : return( mallocError_message ); 81 case nfu_insufficientMemory : return( insufficientMemory_message ); 82 case nfu_badIndex : return( badIndex_message ); 83 case nfu_XNotAscending : return( XNotAscending_message ); 84 case nfu_badIndexForX : return( badIndexForX_message ); 85 case nfu_XOutsideDomain : return( XOutsideDomain_message ); 86 case nfu_invalidInterpolation : return( invalidInterpolation_message ); 87 case nfu_badSelf : return( badSelf_message ); 88 case nfu_divByZero : return( divByZero_message ); 89 case nfu_unsupportedInterpolation : return( unsupportedInterpolation_message ); 90 case nfu_unsupportedInterpolationConversion : return( unsupportedInterpolationConversion_message ); 91 case nfu_empty : return( empty_message ); 92 case nfu_tooFewPoints : return( tooFewPoints_message ); 93 case nfu_domainsNotMutual : return( notMutualDomian_message ); 94 case nfu_badInput : return( badInput_message ); 95 case nfu_badNorm : return( badNorm_message ); 96 case nfu_badIntegrationInput : return( badIntegrationInput_message ); 97 case nfu_otherInterpolation : return( otherInterpolation_message ); 98 case nfu_failedToConverge : return( failedToConverge_message ); 99 case nfu_oddNumberOfValues : return( oddNumberOfValues_message ); 100 } 101 return( unknownStatus_message ); 102 } 103 /* 104 ************************************************************ 105 */ 106 void nfu_setMemoryDebugMode( int mode ) { 107 108 nfu_debugging = mode; 109 } 110 /* 111 ************************************************************ 112 */ 113 void *nfu_malloc( size_t size ) { 114 115 void *p = malloc( size ); 116 117 if( nfu_debugging ) printf( "nfu_malloc %12p size = %8llu\n", p, (long long unsigned) size ); 118 return( p ); 119 } 120 /* 121 ************************************************************ 122 */ 123 void *nfu_calloc( size_t size, size_t n ) { 124 125 void *p = calloc( size, n ); 126 127 if( nfu_debugging ) printf( "nfu_calloc %12p size = %8llu, n = %8llu\n", p, (long long unsigned) size, (long long unsigned) n ); 128 return( p ); 129 } 130 /* 131 ************************************************************ 132 */ 133 void *nfu_realloc( size_t size, void *old ) { 134 135 void *p = realloc( old, size ); 136 137 if( nfu_debugging ) printf( "nfu_realloc %12p size = %8llu", p, (long long unsigned) size ); 138 return( p ); 139 } 140 /* 141 ************************************************************ 142 */ 143 void *nfu_free( void *p ) { 144 145 if( p != NULL ) { 146 if( nfu_debugging ) printf( "nfu_free %12p\n", p ); 147 free( p ); 148 } 149 return( NULL ); 150 } 151 /* 152 ******************************************************** 153 */ 154 void nfu_printMsg( char *fmt, ... ) { 155 156 va_list args; 157 158 va_start( args, fmt ); 159 vfprintf( stderr, fmt, args ); 160 fprintf( stderr, "\n" ); 161 va_end( args ); 162 } 163 /* 164 ******************************************************** 165 */ 166 void nfu_printErrorMsg( char *fmt, ... ) { 167 168 va_list args; 169 170 va_start( args, fmt ); 171 vfprintf( stderr, fmt, args ); 172 fprintf( stderr, "\n" ); 173 va_end( args ); 174 175 exit( EXIT_FAILURE ); 176 } 177 178 #if defined __cplusplus 179 } 180 #endif 181