Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/stdlib.hfa

    rb6a71bc rfbe3f03  
    1010// Created On       : Thu Jan 28 17:12:35 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Apr 12 07:39:15 2024
    13 // Update Count     : 812
     12// Last Modified On : Mon Apr 15 22:11:51 2024
     13// Update Count     : 817
    1414//
    1515
     
    6464        } // calloc
    6565
    66         T * resize( T * ptr, size_t size ) {                            // CFA resize, eliminate return-type cast
     66        T * resize( T * ptr, size_t size ) {                            // CFA resize
    6767                if ( _Alignof(T) <= libAlign() ) return (T *)resize( (void *)ptr, size ); // CFA resize
    6868                else return (T *)resize( (void *)ptr, _Alignof(T), size ); // CFA resize
    6969        } // resize
    7070
    71         T * realloc( T * ptr, size_t size ) {                           // CFA realloc, eliminate return-type cast
     71        T * realloc( T * ptr, size_t size ) {                           // CFA realloc
    7272                if ( _Alignof(T) <= libAlign() ) return (T *)realloc( (void *)ptr, size ); // C realloc
    7373                else return (T *)realloc( (void *)ptr, _Alignof(T), size ); // CFA realloc
     74        } // realloc
     75
     76        T * reallocarray( T * ptr, size_t dim ) {                       // CFA reallocarray
     77                if ( _Alignof(T) <= libAlign() ) return (T *)reallocarray( (void *)ptr, dim, sizeof(T) ); // C reallocarray
     78                else return (T *)reallocarray( (void *)ptr, _Alignof(T), dim ); // CFA reallocarray
    7479        } // realloc
    7580
     
    210215        } // alloc_internal$
    211216
    212         forall( TT... | { T * alloc_internal$( void *, T *, size_t, size_t, S_fill(T), TT ); } ) {
     217        forall( TT ... | { T * alloc_internal$( void *, T *, size_t, size_t, S_fill(T), TT ); } ) {
    213218                T * alloc_internal$( void *, T *, size_t Align, size_t Dim, S_fill(T) Fill, T_resize Resize, TT rest ) {
    214219                return alloc_internal$( Resize, (T*)0p, Align, Dim, Fill, rest);
     
    262267        free( (void *)ptr );                                                            // C free
    263268} // free
    264 static inline forall( T &, TT... | { void free( TT ); } )
     269static inline forall( T &, TT ... | { void free( TT ); } )
    265270void free( T * ptr, TT rest ) {
    266271        free( ptr );
     
    269274
    270275// CFA allocation/deallocation and constructor/destructor, non-array types
    271 static inline forall( T & | sized(T), TT... | { void ?{}( T &, TT ); } )
     276static inline forall( T & | sized(T), TT ... | { void ?{}( T &, TT ); } )
    272277T * new( TT p ) {
    273278        return &(*(T *)malloc()){ p };                                          // run constructor
     
    282287        free( ptr );                                                                            // always call free
    283288} // delete
    284 static inline forall( T &, TT... | { void ^?{}( T & ); void delete( TT ); } )
     289static inline forall( T &, TT ... | { void ^?{}( T & ); void delete( TT ); } )
    285290void delete( T * ptr, TT rest ) {
    286291        delete( ptr );
     
    289294
    290295// CFA allocation/deallocation and constructor/destructor, array types
    291 forall( T & | sized(T), TT... | { void ?{}( T &, TT ); } ) T * anew( size_t dim, TT p );
     296forall( T & | sized(T), TT ... | { void ?{}( T &, TT ); } ) T * anew( size_t dim, TT p );
    292297forall( T & | sized(T) | { void ^?{}( T & ); } ) void adelete( T arr[] );
    293 forall( T & | sized(T) | { void ^?{}( T & ); }, TT... | { void adelete( TT ); } ) void adelete( T arr[], TT rest );
     298forall( T & | sized(T) | { void ^?{}( T & ); }, TT ... | { void adelete( TT ); } ) void adelete( T arr[], TT rest );
    294299//---------------------------------------
    295300
Note: See TracChangeset for help on using the changeset viewer.