Changes in / [3d02803:78bc398]
- Files:
-
- 1 added
- 3 edited
-
doc/theses/fangren_yu_MMath/benchmarks.tex (added)
-
libcfa/src/stdlib.cfa (modified) (5 diffs)
-
tests/.expect/alloc.txt (modified) (1 diff)
-
tests/alloc.cfa (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/stdlib.cfa
r3d02803 r78bc398 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 -
tests/.expect/alloc.txt
r3d02803 r78bc398 76 76 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 77 77 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 78 ctor79 ctor80 ctor81 ctor82 ctor83 ctor84 ctor85 ctor86 ctor87 ctor88 ctor89 ctor90 ctor91 ctor92 ctor93 dtor94 dtor95 dtor96 dtor97 dtor98 dtor99 dtor100 dtor101 dtor102 dtor103 dtor104 dtor105 dtor106 dtor107 dtor108 78 109 79 pointer arithmetic 0 -
tests/alloc.cfa
r3d02803 r78bc398 10 10 // Created On : Wed Feb 3 07:56:22 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Sep 24 18:21:09 202513 // Update Count : 49 312 // Last Modified On : Tue Apr 23 14:04:11 2024 13 // Update Count : 492 14 14 // 15 15 … … 362 362 assert( const_count == 2 + 2 * dim && dest_count == 2 + 2 * dim); // assertion for testing 363 363 364 struct Empty {};365 void ?{}( Empty & ) { sout | "ctor"; }366 void ^?{}( Empty & ) { sout | "dtor"; }367 Empty * ea1 = anew( 5 );368 Empty * ea2 = anew( 5 );369 Empty * ea3 = anew( 5 );370 adelete( ea1, ea2, ea3 );371 372 364 // extras 373 365 sout | nl;
Note:
See TracChangeset
for help on using the changeset viewer.