Changes in src/libcfa/stdlib.c [6065b3aa:f3fc631f]
- File:
-
- 1 edited
-
src/libcfa/stdlib.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/libcfa/stdlib.c
r6065b3aa rf3fc631f 10 10 // Created On : Thu Jan 28 17:10:29 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T hu Jun 1 21:52:57201713 // Update Count : 2 8012 // Last Modified On : Tue May 30 09:07:56 2017 13 // Update Count : 237 14 14 // 15 15 … … 28 28 29 29 // resize, non-array types 30 forall( dtype T | sized(T) ) T * alloc( T ptr[], size_t dim, char fill ) { 30 forall( dtype T | sized(T) ) T * realloc( T * ptr, size_t size, char fill ) { // alternative realloc with fill value 31 //printf( "X6\n" ); 31 32 size_t olen = malloc_usable_size( ptr ); // current allocation 32 char * nptr = (void *)realloc( (void *)ptr, dim * (size_t)sizeof(T) );// C realloc33 char * nptr = (void *)realloc( (void *)ptr, size ); // C realloc 33 34 size_t nlen = malloc_usable_size( nptr ); // new allocation 34 35 if ( nlen > olen ) { // larger ? … … 36 37 } // 37 38 return (T *)nptr; 38 } // alloc39 40 // allocation/deallocation and constructor/destructor , non-array types41 forall( dtype T | sized(T), ttype Params| { void ?{}( T *, Params ); } )39 } // realloc 40 41 // allocation/deallocation and constructor/destructor 42 forall( dtype T, ttype Params | sized(T) | { void ?{}( T *, Params ); } ) 42 43 T * new( Params p ) { 43 return ( malloc()){ p }; // run constructor44 return ((T *)malloc()){ p }; 44 45 } // new 45 46 46 47 forall( dtype T | { void ^?{}( T * ); } ) 47 48 void delete( T * ptr ) { 48 if ( ptr ) { // ignore null49 if ( ptr ) { 49 50 ^ptr{}; // run destructor 50 51 free( ptr ); … … 54 55 forall( dtype T, ttype Params | { void ^?{}( T * ); void delete( Params ); } ) 55 56 void delete( T * ptr, Params rest ) { 56 if ( ptr ) { // ignore null57 if ( ptr ) { 57 58 ^ptr{}; // run destructor 58 59 free( ptr ); … … 60 61 delete( rest ); 61 62 } // delete 62 63 64 // allocation/deallocation and constructor/destructor, array types65 forall( dtype T | sized(T), ttype Params | { void ?{}( T *, Params ); } )66 T * anew( size_t dim, Params p ) {67 T *arr = alloc( dim );68 for ( unsigned int i = 0; i < dim; i += 1 ) {69 (&arr[i]){ p }; // run constructor70 } // for71 return arr;72 } // anew73 74 forall( dtype T | sized(T) | { void ^?{}( T * ); } )75 void adelete( size_t dim, T arr[] ) {76 if ( arr ) { // ignore null77 for ( int i = dim - 1; i >= 0; i -= 1 ) { // reverse allocation order, must be unsigned78 ^(&arr[i]){}; // run destructor79 } // for80 free( arr );81 } // if82 } // adelete83 84 forall( dtype T | sized(T) | { void ^?{}( T * ); }, ttype Params | { void adelete( Params ); } )85 void adelete( size_t dim, T arr[], Params rest ) {86 if ( arr ) { // ignore null87 for ( int i = dim - 1; i >= 0; i -= 1 ) { // reverse allocation order, must be unsigned88 ^(&arr[i]){}; // run destructor89 } // for90 free( arr );91 } // if92 adelete( rest );93 } // adelete94 63 95 64 //---------------------------------------
Note:
See TracChangeset
for help on using the changeset viewer.