Changeset 28e58fd for src/libcfa/stdlib.c
- Timestamp:
- Aug 25, 2017, 10:38:34 AM (8 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 800d275
- Parents:
- af08051 (diff), 3eab308c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/libcfa/stdlib.c
raf08051 r28e58fd 10 10 // Created On : Thu Jan 28 17:10:29 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Aug 8 17:31:13201713 // Update Count : 29 112 // Last Modified On : Wed Aug 23 20:30:44 2017 13 // Update Count : 292 14 14 // 15 15 … … 32 32 if ( nlen > olen ) { // larger ? 33 33 memset( nptr + olen, (int)fill, nlen - olen ); // initialize added storage 34 } // 34 } // 35 35 return (T *)nptr; 36 36 } // alloc 37 37 38 38 // allocation/deallocation and constructor/destructor, non-array types 39 forall( dtype T | sized(T), ttype Params | { void ?{}( T *, Params ); } )39 forall( dtype T | sized(T), ttype Params | { void ?{}( T &, Params ); } ) 40 40 T * new( Params p ) { 41 return (malloc()){ p }; // run constructor41 return &(*malloc()){ p }; // run constructor 42 42 } // new 43 43 44 forall( dtype T | { void ^?{}( T *); } )44 forall( dtype T | sized(T) | { void ^?{}( T & ); } ) 45 45 void delete( T * ptr ) { 46 46 if ( ptr ) { // ignore null 47 ^ ptr{}; // run destructor47 ^(*ptr){}; // run destructor 48 48 free( ptr ); 49 49 } // if 50 50 } // delete 51 51 52 forall( dtype T, ttype Params | { void ^?{}( T *); void delete( Params ); } )52 forall( dtype T, ttype Params | sized(T) | { void ^?{}( T & ); void delete( Params ); } ) 53 53 void delete( T * ptr, Params rest ) { 54 54 if ( ptr ) { // ignore null 55 ^ ptr{}; // run destructor55 ^(*ptr){}; // run destructor 56 56 free( ptr ); 57 57 } // if … … 61 61 62 62 // allocation/deallocation and constructor/destructor, array types 63 forall( dtype T | sized(T), ttype Params | { void ?{}( T *, Params ); } )63 forall( dtype T | sized(T), ttype Params | { void ?{}( T &, Params ); } ) 64 64 T * anew( size_t dim, Params p ) { 65 65 T *arr = alloc( dim ); 66 66 for ( unsigned int i = 0; i < dim; i += 1 ) { 67 ( &arr[i]){ p }; // run constructor67 (arr[i]){ p }; // run constructor 68 68 } // for 69 69 return arr; 70 70 } // anew 71 71 72 forall( dtype T | sized(T) | { void ^?{}( T *); } )72 forall( dtype T | sized(T) | { void ^?{}( T & ); } ) 73 73 void adelete( size_t dim, T arr[] ) { 74 74 if ( arr ) { // ignore null 75 75 for ( int i = dim - 1; i >= 0; i -= 1 ) { // reverse allocation order, must be unsigned 76 ^( &arr[i]){}; // run destructor76 ^(arr[i]){}; // run destructor 77 77 } // for 78 78 free( arr ); … … 80 80 } // adelete 81 81 82 forall( dtype T | sized(T) | { void ^?{}( T *); }, ttype Params | { void adelete( Params ); } )82 forall( dtype T | sized(T) | { void ^?{}( T & ); }, ttype Params | { void adelete( Params ); } ) 83 83 void adelete( size_t dim, T arr[], Params rest ) { 84 84 if ( arr ) { // ignore null 85 85 for ( int i = dim - 1; i >= 0; i -= 1 ) { // reverse allocation order, must be unsigned 86 ^( &arr[i]){}; // run destructor86 ^(arr[i]){}; // run destructor 87 87 } // for 88 88 free( arr ); … … 305 305 306 306 forall( otype T ) 307 void swap( T * t1, T *t2 ) {308 T temp = *t1;309 *t1 = *t2;310 *t2 = temp;307 void swap( T & t1, T & t2 ) { 308 T temp = t1; 309 t1 = t2; 310 t2 = temp; 311 311 } // swap 312 312
Note:
See TracChangeset
for help on using the changeset viewer.