Changeset 2df85ce for libcfa/src
- Timestamp:
- Sep 24, 2025, 6:08:04 PM (15 hours ago)
- Branches:
- master
- Children:
- 1911f37
- Parents:
- a8079351
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/stdlib.cfa
ra8079351 r2df85ce 10 10 // Created On : Thu Jan 28 17:10:29 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Apr 21 16:17:22 202413 // Update Count : 7 0012 // Last Modified On : Wed Sep 24 18:01:01 2025 13 // Update Count : 759 14 14 // 15 15 … … 33 33 forall( T & | sized(T), Parms ... | { void ?{}( T &, Parms ); } ) 34 34 T * anew( size_t dim, Parms p ) { 35 T * arr = alloc( dim ); 35 T * arr; 36 if ( sizeof( T ) == 0 ) { // empty element size ? 37 arr = (T *)(size_t *)alloc(); // create fake array 38 *((size_t *)arr) = dim; // remember dimension 39 } else arr = alloc( dim ); 36 40 for ( i; dim ) { 37 41 (arr[i]){ p }; // run constructor … … 42 46 forall( T & | sized(T) | { void ^?{}( T & ); } ) 43 47 void adelete( T arr[] ) { 44 if ( arr ) { // ignore null 45 size_t dim = malloc_size( arr ) / sizeof( T ); 46 for ( i; 0 -~= dim - 1 ) { // reverse allocation order, must be unsigned 47 ^(arr[i]){}; // run destructor 48 } // for 49 free( arr ); 50 } // if 48 if ( arr == 0p ) return; // 0p ? special case 49 size_t dim = sizeof( T ) == 0 ? (size_t)(*(size_t *)arr) : malloc_size( arr ) / sizeof( T ); // compute dimension 50 for ( i; 0 -~= dim - 1 ) { // reverse allocation order, must be signed 51 ^(arr[i]){}; // run destructor 52 } // for 53 if ( sizeof( T ) == 0 ) free( (size_t *)arr ); else free( arr ); 51 54 } // adelete 52 55 53 56 forall( T & | sized(T) | { void ^?{}( T & ); }, List ... | { void adelete( List ); } ) 54 57 void adelete( T arr[], List rest ) { 55 if ( arr ) { // ignore null 56 size_t dim = malloc_size( arr ) / sizeof( T ); 57 for ( i; 0 -~= dim - 1 ) { // reverse allocation order, must be unsigned 58 ^(arr[i]){}; // run destructor 59 } // for 60 free( arr ); 61 } // if 58 adelete( arr ); 62 59 adelete( rest ); 63 60 } // adelete … … 69 66 bool checkif( const char s[], int (* kind)( int ) ) { 70 67 for () { 71 72 68 if ( *s == '\0' ) return true; 69 if ( ! kind( *s ) ) return false; 73 70 s += 1; 74 71 } // for … … 77 74 bool checkif( const char s[], int (* kind)( int, locale_t ), locale_t locale ) { 78 75 for () { 79 80 76 if ( *s == '\0' ) return true; 77 if ( ! kind( *s, locale ) ) return false; 81 78 s += 1; 82 79 } // for
Note:
See TracChangeset
for help on using the changeset viewer.