- Timestamp:
- Jan 4, 2022, 11:05:42 AM (3 years ago)
- Branches:
- ADT, ast-experimental, enum, forall-pointer-decay, master, pthread-emulation, qualifiedEnum
- Children:
- 15b05c8
- Parents:
- aa8e24c3
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/stdlib.hfa
raa8e24c3 raa0a1ad 10 10 // Created On : Thu Jan 28 17:12:35 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Dec 29 15:30:58 202113 // Update Count : 59 112 // Last Modified On : Sun Jan 2 22:53:57 2022 13 // Update Count : 594 14 14 // 15 15 … … 43 43 //--------------------------------------- 44 44 45 // Macro because of returns46 #define ARRAY_ALLOC$( allocation, alignment, dim ) \47 if ( _Alignof(T) <= libAlign() ) return (T *)(void *)allocation( dim, (size_t)sizeof(T) ); /* C allocation */ \48 else return (T *)alignment( _Alignof(T), dim, sizeof(T) )49 50 45 static inline forall( T & | sized(T) ) { 51 46 // CFA safe equivalents, i.e., implicit size specification 52 47 53 48 T * malloc( void ) { 54 if ( _Alignof(T) <= libAlign() ) return (T *) (void *)malloc( (size_t)sizeof(T) ); // C allocation49 if ( _Alignof(T) <= libAlign() ) return (T *)malloc( sizeof(T) ); // C allocation 55 50 else return (T *)memalign( _Alignof(T), sizeof(T) ); 56 51 } // malloc 57 52 58 53 T * aalloc( size_t dim ) { 59 ARRAY_ALLOC$( aalloc, amemalign, dim ); 54 if ( _Alignof(T) <= libAlign() ) return (T *)aalloc( dim, sizeof(T) ); // C allocation 55 else return (T *)amemalign( _Alignof(T), dim, sizeof(T) ); 60 56 } // aalloc 61 57 62 58 T * calloc( size_t dim ) { 63 ARRAY_ALLOC$( calloc, cmemalign, dim ); 59 if ( _Alignof(T) <= libAlign() ) return (T *)calloc( dim, sizeof(T) ); // C allocation 60 else return (T *)cmemalign( _Alignof(T), dim, sizeof(T) ); 64 61 } // calloc 65 62 66 63 T * resize( T * ptr, size_t size ) { // CFA resize, eliminate return-type cast 67 if ( _Alignof(T) <= libAlign() ) return (T *) (void *)resize( (void *)ptr, size ); // CFA resize68 else return (T *) (void *)resize( (void *)ptr, _Alignof(T), size ); // CFA resize64 if ( _Alignof(T) <= libAlign() ) return (T *)resize( (void *)ptr, size ); // CFA resize 65 else return (T *)resize( (void *)ptr, _Alignof(T), size ); // CFA resize 69 66 } // resize 70 67 71 68 T * realloc( T * ptr, size_t size ) { // CFA realloc, eliminate return-type cast 72 if ( _Alignof(T) <= libAlign() ) return (T *) (void *)realloc( (void *)ptr, size ); // C realloc73 else return (T *) (void *)realloc( (void *)ptr, _Alignof(T), size ); // CFA realloc69 if ( _Alignof(T) <= libAlign() ) return (T *)realloc( (void *)ptr, size ); // C realloc 70 else return (T *)realloc( (void *)ptr, _Alignof(T), size ); // CFA realloc 74 71 } // realloc 75 72
Note: See TracChangeset
for help on using the changeset viewer.