Changes in src/libcfa/stdlib.c [f3ddc21:02d241f]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/libcfa/stdlib.c
rf3ddc21 r02d241f 10 10 // Created On : Thu Jan 28 17:10:29 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue May 9 08:43:00201713 // Update Count : 1 9112 // Last Modified On : Sun Apr 16 10:41:05 2017 13 // Update Count : 189 14 14 // 15 15 … … 27 27 } // extern "C" 28 28 29 forall( dtype T | sized(T) ) T * malloc( void ) { // type-safe 30 return (T *)(void *)malloc( (size_t)sizeof(T) ); 31 } // malloc 32 33 forall( dtype T | sized(T) ) T * malloc( char fill ) { // initial with fill value (like calloc) 34 T * ptr = (T *)(void *)malloc( (size_t)sizeof(T) ); 29 forall( dtype T | sized(T) ) T * malloc( void ) { 30 //printf( "malloc1\n" ); 31 return (T *)(void*)malloc( (size_t)sizeof(T) ); 32 } // malloc 33 forall( dtype T | sized(T) ) T * malloc( char fill ) { 34 //printf( "malloc3\n" ); 35 T * ptr = (T *)(void*)malloc( (size_t)sizeof(T) ); 35 36 return memset( ptr, (int)fill, sizeof(T) ); 36 37 } // malloc 37 38 38 forall( dtype T | sized(T) ) T * malloc( T * ptr, size_t size ) { // alternative realloc 39 return (T *)realloc( ptr, size ); 40 } // malloc 41 42 forall( dtype T | sized(T) ) T * malloc( T * ptr, size_t size, unsigned char fill ) { // alternative realloc with fill value 43 return (T *)realloc( ptr, size, fill ); 44 } // malloc 45 46 47 forall( dtype T | sized(T) ) T * calloc( size_t nmemb ) { // type-safe array initialization with fill 0 39 forall( dtype T | sized(T) ) T * calloc( size_t nmemb ) { 40 //printf( "calloc\n" ); 48 41 return (T *)calloc( nmemb, sizeof(T) ); 49 42 } // calloc 50 43 51 52 forall( dtype T | sized(T) ) T * realloc( T * ptr, size_t size ) { // type-safe 44 forall( dtype T | sized(T) ) T * realloc( T * ptr, size_t size ) { 45 //printf( "realloc1\n" ); 53 46 return (T *)(void *)realloc( (void *)ptr, size ); 54 47 } // realloc 55 56 forall( dtype T | sized(T) ) T * realloc( T * ptr, size_t size, unsigned char fill ) { // alternative realloc with fill value 48 forall( dtype T | sized(T) ) T * realloc( T * ptr, size_t size, unsigned char fill ) { 49 //printf( "realloc2\n" ); 57 50 char * nptr = (T *)(void *)realloc( (void *)ptr, size ); 58 51 size_t unused = malloc_usable_size( nptr ); … … 61 54 } // realloc 62 55 63 64 forall( dtype T | sized(T) ) T * aligned_alloc( size_t alignment ) { // aligned allocation 56 forall( dtype T | sized(T) ) T * malloc( T * ptr, size_t size ) { 57 //printf( "malloc4\n" ); 58 return (T *)realloc( ptr, size ); 59 } // malloc 60 forall( dtype T | sized(T) ) T * malloc( T * ptr, size_t size, unsigned char fill ) { 61 //printf( "malloc5\n" ); 62 return (T *)realloc( ptr, size, fill ); 63 } // malloc 64 65 forall( dtype T | sized(T) ) T * aligned_alloc( size_t alignment ) { 66 //printf( "aligned_alloc\n" ); 65 67 return (T *)memalign( alignment, sizeof(T) ); 66 68 } // aligned_alloc 67 69 68 70 forall( dtype T | sized(T) ) T * memalign( size_t alignment ) { 71 //printf( "memalign\n" ); 69 72 return (T *)memalign( alignment, sizeof(T) ); 70 73 } // memalign 71 74 72 75 forall( dtype T | sized(T) ) int posix_memalign( T ** ptr, size_t alignment ) { 76 //printf( "posix_memalign\n" ); 73 77 return posix_memalign( (void **)ptr, alignment, sizeof(T) ); 74 78 } // posix_memalign 75 79 76 77 forall( dtype T, ttype Params | sized(T) | { void ?{}( T *, Params ); } ) // new 80 forall( dtype T, ttype Params | sized(T) | { void ?{}( T *, Params ); } ) 78 81 T * new( Params p ) { 79 82 return ((T *)malloc()){ p }; 80 } // new81 82 forall( dtype T | { void ^?{}(T *); } ) // delete83 } 84 85 forall( dtype T | { void ^?{}(T *); } ) 83 86 void delete( T * ptr ) { 84 85 86 87 88 } // delete87 if ( ptr ) { 88 ^ptr{}; 89 free( ptr ); 90 } 91 } 89 92 90 93 forall( dtype T, ttype Params | { void ^?{}(T *); void delete(Params); } ) … … 95 98 } 96 99 delete( rest ); 97 } // delete100 } 98 101 99 102 //--------------------------------------- … … 103 106 if ( sscanf( ptr, "%d", &i ) == EOF ) {} 104 107 return i; 105 } // ato 106 108 } 107 109 unsigned int ato( const char * ptr ) { 108 110 unsigned int ui; 109 111 if ( sscanf( ptr, "%u", &ui ) == EOF ) {} 110 112 return ui; 111 } // ato 112 113 } 113 114 long int ato( const char * ptr ) { 114 115 long int li; 115 116 if ( sscanf( ptr, "%ld", &li ) == EOF ) {} 116 117 return li; 117 } // ato 118 118 } 119 119 unsigned long int ato( const char * ptr ) { 120 120 unsigned long int uli; 121 121 if ( sscanf( ptr, "%lu", &uli ) == EOF ) {} 122 122 return uli; 123 } // ato 124 123 } 125 124 long long int ato( const char * ptr ) { 126 125 long long int lli; 127 126 if ( sscanf( ptr, "%lld", &lli ) == EOF ) {} 128 127 return lli; 129 } // ato 130 128 } 131 129 unsigned long long int ato( const char * ptr ) { 132 130 unsigned long long int ulli; 133 131 if ( sscanf( ptr, "%llu", &ulli ) == EOF ) {} 134 132 return ulli; 135 } // ato 136 133 } 137 134 138 135 float ato( const char * ptr ) { … … 140 137 if ( sscanf( ptr, "%f", &f ) == EOF ) {} 141 138 return f; 142 } // ato 143 139 } 144 140 double ato( const char * ptr ) { 145 141 double d; 146 142 if ( sscanf( ptr, "%lf", &d ) == EOF ) {} 147 143 return d; 148 } // ato 149 144 } 150 145 long double ato( const char * ptr ) { 151 146 long double ld; 152 147 if ( sscanf( ptr, "%Lf", &ld ) == EOF ) {} 153 148 return ld; 154 } // ato 155 149 } 156 150 157 151 float _Complex ato( const char * ptr ) { … … 159 153 if ( sscanf( ptr, "%g%gi", &re, &im ) == EOF ) {} 160 154 return re + im * _Complex_I; 161 } // ato 162 155 } 163 156 double _Complex ato( const char * ptr ) { 164 157 double re, im; 165 158 if ( sscanf( ptr, "%lf%lfi", &re, &im ) == EOF ) {} 166 159 return re + im * _Complex_I; 167 } // ato 168 160 } 169 161 long double _Complex ato( const char * ptr ) { 170 162 long double re, im; 171 163 if ( sscanf( ptr, "%Lf%Lfi", &re, &im ) == EOF ) {} 172 164 return re + im * _Complex_I; 173 } // ato 174 165 } 175 166 176 167 int strto( const char * sptr, char ** eptr, int base ) { 177 168 return (int)strtol( sptr, eptr, base ); 178 } // strto 179 169 } 180 170 unsigned int strto( const char * sptr, char ** eptr, int base ) { 181 171 return (unsigned int)strtoul( sptr, eptr, base ); 182 } // strto 183 172 } 184 173 long int strto( const char * sptr, char ** eptr, int base ) { 185 174 return strtol( sptr, eptr, base ); 186 } // strto 187 175 } 188 176 unsigned long int strto( const char * sptr, char ** eptr, int base ) { 189 177 return strtoul( sptr, eptr, base ); 190 } // strto 191 178 } 192 179 long long int strto( const char * sptr, char ** eptr, int base ) { 193 180 return strtoll( sptr, eptr, base ); 194 } // strto 195 181 } 196 182 unsigned long long int strto( const char * sptr, char ** eptr, int base ) { 197 183 return strtoull( sptr, eptr, base ); 198 } // strto 199 184 } 200 185 201 186 float strto( const char * sptr, char ** eptr ) { 202 187 return strtof( sptr, eptr ); 203 } // strto 204 188 } 205 189 double strto( const char * sptr, char ** eptr ) { 206 190 return strtod( sptr, eptr ); 207 } // strto 208 191 } 209 192 long double strto( const char * sptr, char ** eptr ) { 210 193 return strtold( sptr, eptr ); 211 } // strto 212 194 } 213 195 214 196 float _Complex strto( const char * sptr, char ** eptr ) { … … 219 201 if ( sptr == *eptr ) return 0.0; 220 202 return re + im * _Complex_I; 221 } // strto 222 203 } 223 204 double _Complex strto( const char * sptr, char ** eptr ) { 224 205 double re, im; … … 228 209 if ( sptr == *eptr ) return 0.0; 229 210 return re + im * _Complex_I; 230 } // strto 231 211 } 232 212 long double _Complex strto( const char * sptr, char ** eptr ) { 233 213 long double re, im; … … 237 217 if ( sptr == *eptr ) return 0.0; 238 218 return re + im * _Complex_I; 239 } // strto219 } 240 220 241 221 //---------------------------------------
Note:
See TracChangeset
for help on using the changeset viewer.