Changes in libcfa/src/stdlib.cfa [1911f37:c0363be]
- File:
-
- 1 edited
-
libcfa/src/stdlib.cfa (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/stdlib.cfa
r1911f37 rc0363be 10 10 // Created On : Thu Jan 28 17:10:29 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Sep 24 18:14:20 202513 // Update Count : 7 6012 // Last Modified On : Sun Apr 21 16:17:22 2024 13 // Update Count : 700 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; 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 ); 35 T * arr = alloc( dim ); 40 36 for ( i; dim ) { 41 37 (arr[i]){ p }; // run constructor … … 46 42 forall( T & | sized(T) | { void ^?{}( T & ); } ) 47 43 void adelete( T arr[] ) { 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 ); 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 54 51 } // adelete 55 52 56 53 forall( T & | sized(T) | { void ^?{}( T & ); }, List ... | { void adelete( List ); } ) 57 54 void adelete( T arr[], List rest ) { 58 adelete( arr ); 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 59 62 adelete( rest ); 60 63 } // adelete … … 65 68 66 69 bool checkif( const char s[], int (* kind)( int ) ) { 67 for () { // at least 1 character '\0'68 if ( *s == '\0' ) return true;69 if ( ! kind( *s ) ) return false;70 for () { 71 if ( *s == '\0' ) return true; 72 if ( ! kind( *s ) ) return false; 70 73 s += 1; 71 74 } // for … … 73 76 74 77 bool checkif( const char s[], int (* kind)( int, locale_t ), locale_t locale ) { 75 for () { // at least 1 character '\0'76 if ( *s == '\0' ) return true;77 if ( ! kind( *s, locale ) ) return false;78 for () { 79 if ( *s == '\0' ) return true; 80 if ( ! kind( *s, locale ) ) return false; 78 81 s += 1; 79 82 } // for
Note:
See TracChangeset
for help on using the changeset viewer.