Changes in libcfa/src/stdlib.hfa [68f0c4e:191a190]
- File:
-
- 1 edited
-
libcfa/src/stdlib.hfa (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/stdlib.hfa
r68f0c4e r191a190 43 43 //--------------------------------------- 44 44 45 // Macro because of returns 46 #define $VAR_ALLOC( allocation, alignment ) \ 47 if ( _Alignof(T) <= libAlign() ) return (T *)(void *)allocation( (size_t)sizeof(T) ); /* C allocation */ \ 48 else return (T *)alignment( _Alignof(T), sizeof(T) ) 49 45 50 #define $ARRAY_ALLOC( allocation, alignment, dim ) \ 46 51 if ( _Alignof(T) <= libAlign() ) return (T *)(void *)allocation( dim, (size_t)sizeof(T) ); /* C allocation */ \ 47 52 else return (T *)alignment( _Alignof(T), dim, sizeof(T) ) 48 53 54 #define $RE_SPECIALS( ptr, size, allocation, alignment ) \ 55 if ( unlikely( size == 0 ) || unlikely( ptr == 0p ) ) { \ 56 if ( unlikely( size == 0 ) ) free( ptr ); \ 57 $VAR_ALLOC( malloc, memalign ); \ 58 } /* if */ 59 49 60 static inline forall( dtype T | sized(T) ) { 50 61 // Cforall safe equivalents, i.e., implicit size specification 51 62 52 63 T * malloc( void ) { 53 if ( _Alignof(T) <= libAlign() ) return (T *)(void *)malloc( (size_t)sizeof(T) ); /* C allocation */ 54 else return (T *)memalign( _Alignof(T), sizeof(T) ); 64 $VAR_ALLOC( malloc, memalign ); 55 65 } // malloc 56 66 … … 64 74 65 75 T * resize( T * ptr, size_t size ) { // CFA resize, eliminate return-type cast 76 $RE_SPECIALS( ptr, size, malloc, memalign ); 66 77 if ( _Alignof(T) <= libAlign() ) return (T *)(void *)resize( (void *)ptr, size ); // CFA resize 67 78 else return (T *)(void *)resize( (void *)ptr, _Alignof(T), size ); // CFA resize … … 69 80 70 81 T * realloc( T * ptr, size_t size ) { // CFA realloc, eliminate return-type cast 82 $RE_SPECIALS( ptr, size, malloc, memalign ); 71 83 if ( _Alignof(T) <= libAlign() ) return (T *)(void *)realloc( (void *)ptr, size ); // C realloc 72 84 else return (T *)(void *)realloc( (void *)ptr, _Alignof(T), size ); // CFA realloc … … 176 188 size_t size = sizeof(T); 177 189 size_t copy_end = 0; 190 178 191 if(Resize) { 179 //printf("1. $alloc_internal got: %p %p %lu %lu\n", Resize, Realloc, Align, Dim); // these prints are temporary 180 ptr = (T*) (void *) resize( (void *)Resize, Align, Dim * size ); 192 ptr = (T*) (void *) resize( (int *)Resize, Align, Dim * size ); 181 193 } else if (Realloc) { 182 194 if (Fill.tag != '0') copy_end = min(malloc_size( Realloc ), Dim * size); 183 //printf("2. $alloc_internal got: %p %p %lu %lu\n", Resize, Realloc, Align, Dim); 184 ptr = (T*) (void *) realloc( (void *)Realloc, Align, Dim * size ); 195 ptr = (T*) (void *) realloc( (int *)Realloc, Align, Dim * size ); 185 196 } else { 186 //printf("3. $alloc_internal got: %p %p %lu %lu\n", Resize, Realloc, Align, Dim);187 197 ptr = (T*) (void *) memalign( Align, Dim * size ); 188 198 }
Note:
See TracChangeset
for help on using the changeset viewer.