Changes in libcfa/src/stdlib.hfa [d4264e8:b6a71bc]
- File:
-
- 1 edited
-
libcfa/src/stdlib.hfa (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/stdlib.hfa
rd4264e8 rb6a71bc 10 10 // Created On : Thu Jan 28 17:12:35 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Apr 1 9 09:47:55 202413 // Update Count : 8 2612 // Last Modified On : Fri Apr 12 07:39:15 2024 13 // Update Count : 812 14 14 // 15 15 … … 47 47 48 48 static inline forall( T & | sized(T) ) { 49 // CFA safe equivalents, i.e., implicit size specification , eliminate return-type cast49 // CFA safe equivalents, i.e., implicit size specification 50 50 51 51 T * malloc( void ) { … … 64 64 } // calloc 65 65 66 T * resize( T * ptr, size_t size ) { 67 if ( _Alignof(T) <= libAlign() ) return (T *)resize( (void *)ptr, size ); // C resize66 T * resize( T * ptr, size_t size ) { // CFA resize, eliminate return-type cast 67 if ( _Alignof(T) <= libAlign() ) return (T *)resize( (void *)ptr, size ); // CFA resize 68 68 else return (T *)resize( (void *)ptr, _Alignof(T), size ); // CFA resize 69 69 } // resize 70 70 71 T * resize( T * ptr, size_t alignment, size_t size ) { 72 return (T *)resize( (void *)ptr, alignment, size ); // CFA resize 73 } // resize 74 75 T * realloc( T * ptr, size_t size ) { // CFA realloc 71 T * realloc( T * ptr, size_t size ) { // CFA realloc, eliminate return-type cast 76 72 if ( _Alignof(T) <= libAlign() ) return (T *)realloc( (void *)ptr, size ); // C realloc 77 73 else return (T *)realloc( (void *)ptr, _Alignof(T), size ); // CFA realloc 78 74 } // realloc 79 75 80 T * realloc( T * ptr, size_t alignment, size_t size ) {81 return (T *)realloc( (void *)ptr, alignment, size ); // CFA realloc82 } // realloc83 84 T * reallocarray( T * ptr, size_t dim ) { // CFA reallocarray85 if ( _Alignof(T) <= libAlign() ) return (T *)reallocarray( (void *)ptr, dim, sizeof(T) ); // C reallocarray86 else return (T *)reallocarray( (void *)ptr, _Alignof(T), dim ); // CFA reallocarray87 } // realloc88 89 T * reallocarray( T * ptr, size_t alignment, size_t dim ) {90 return (T *)reallocarray( (void *)ptr, alignment, dim ); // CFA reallocarray91 } // realloc92 93 76 T * memalign( size_t align ) { 94 77 return (T *)memalign( align, sizeof(T) ); // C memalign … … 99 82 } // amemalign 100 83 101 T * cmemalign( size_t align, size_t dim ) {84 T * cmemalign( size_t align, size_t dim ) { 102 85 return (T *)cmemalign( align, dim, sizeof(T) ); // CFA cmemalign 103 86 } // cmemalign … … 176 159 static inline T_resize ?`resize( void * a ) { return (T_resize){a}; } 177 160 161 extern "C" ssize_t write(int fd, const void *buf, size_t count); 178 162 static inline forall( T & | sized(T) ) { 179 S_fill(T) ?`fill ( T t ) {163 S_fill(T) ?`fill ( T t ) { 180 164 S_fill(T) ret = { 't' }; 181 165 size_t size = sizeof(T); … … 186 170 return ret; 187 171 } 188 S_fill(T) ?`fill ( zero_t ) = void; // FIX ME: remove this once ticket 214 is resolved189 S_fill(T) ?`fill ( T * a ) { return (S_fill(T)){ 'T', '0', 0, a }; } // FIX ME: remove this once ticket 214 is resolved190 S_fill(T) ?`fill ( char c ) { return (S_fill(T)){ 'c', c }; }191 S_fill(T) ?`fill ( T a[], size_t nmemb ) { return (S_fill(T)){ 'a', '0', nmemb * sizeof(T), a }; }172 S_fill(T) ?`fill ( zero_t ) = void; // FIX ME: remove this once ticket 214 is resolved 173 S_fill(T) ?`fill ( T * a ) { return (S_fill(T)){ 'T', '0', 0, a }; } // FIX ME: remove this once ticket 214 is resolved 174 S_fill(T) ?`fill ( char c ) { return (S_fill(T)){ 'c', c }; } 175 S_fill(T) ?`fill ( T a[], size_t nmemb ) { return (S_fill(T)){ 'a', '0', nmemb * sizeof(T), a }; } 192 176 193 177 S_realloc(T) ?`realloc ( T * a ) { return (S_realloc(T)){a}; } … … 226 210 } // alloc_internal$ 227 211 228 forall( List ... | { T * alloc_internal$( void *, T *, size_t, size_t, S_fill(T), List); } ) {229 T * alloc_internal$( void *, T *, size_t Align, size_t Dim, S_fill(T) Fill, T_resize Resize, Listrest ) {212 forall( TT... | { T * alloc_internal$( void *, T *, size_t, size_t, S_fill(T), TT ); } ) { 213 T * alloc_internal$( void *, T *, size_t Align, size_t Dim, S_fill(T) Fill, T_resize Resize, TT rest ) { 230 214 return alloc_internal$( Resize, (T*)0p, Align, Dim, Fill, rest); 231 215 } 232 216 233 T * alloc_internal$( void *, T *, size_t Align, size_t Dim, S_fill(T) Fill, S_realloc(T) Realloc, Listrest ) {217 T * alloc_internal$( void *, T *, size_t Align, size_t Dim, S_fill(T) Fill, S_realloc(T) Realloc, TT rest ) { 234 218 return alloc_internal$( (void*)0p, Realloc, Align, Dim, Fill, rest); 235 219 } 236 220 237 T * alloc_internal$( void * Resize, T * Realloc, size_t, size_t Dim, S_fill(T) Fill, T_align Align, Listrest ) {221 T * alloc_internal$( void * Resize, T * Realloc, size_t, size_t Dim, S_fill(T) Fill, T_align Align, TT rest ) { 238 222 return alloc_internal$( Resize, Realloc, Align, Dim, Fill, rest); 239 223 } 240 224 241 T * alloc_internal$( void * Resize, T * Realloc, size_t Align, size_t Dim, S_fill(T), S_fill(T) Fill, Listrest ) {225 T * alloc_internal$( void * Resize, T * Realloc, size_t Align, size_t Dim, S_fill(T), S_fill(T) Fill, TT rest ) { 242 226 return alloc_internal$( Resize, Realloc, Align, Dim, Fill, rest ); 243 227 } 244 228 245 T * alloc( Listall ) {229 T * alloc( TT all ) { 246 230 return alloc_internal$( (void*)0p, (T*)0p, (_Alignof(T) > libAlign() ? _Alignof(T) : libAlign()), (size_t)1, (S_fill(T)){'0'}, all ); 247 231 } 248 232 249 T * alloc( size_t dim, Listall ) {233 T * alloc( size_t dim, TT all ) { 250 234 return alloc_internal$( (void*)0p, (T*)0p, (_Alignof(T) > libAlign() ? _Alignof(T) : libAlign()), dim, (S_fill(T)){'0'}, all ); 251 235 } 252 } // distribution List236 } // distribution TT 253 237 } // distribution T 254 238 … … 274 258 275 259 // CFA deallocation for multiple objects 276 static inline forall( T & ) 260 static inline forall( T & ) // FIX ME, problems with 0p in list 277 261 void free( T * ptr ) { 278 262 free( (void *)ptr ); // C free 279 263 } // free 280 static inline forall( T &, List ... | { void free( List); } )281 void free( T * ptr, Listrest ) {264 static inline forall( T &, TT... | { void free( TT ); } ) 265 void free( T * ptr, TT rest ) { 282 266 free( ptr ); 283 267 free( rest ); … … 285 269 286 270 // CFA allocation/deallocation and constructor/destructor, non-array types 287 static inline forall( T & | sized(T), Parms ... | { void ?{}( T &, Parms); } )288 T * new( Parmsp ) {271 static inline forall( T & | sized(T), TT... | { void ?{}( T &, TT ); } ) 272 T * new( TT p ) { 289 273 return &(*(T *)malloc()){ p }; // run constructor 290 274 } // new … … 298 282 free( ptr ); // always call free 299 283 } // delete 300 static inline forall( T &, List ... | { void ^?{}( T & ); void delete( List); } )301 void delete( T * ptr, Listrest ) {284 static inline forall( T &, TT... | { void ^?{}( T & ); void delete( TT ); } ) 285 void delete( T * ptr, TT rest ) { 302 286 delete( ptr ); 303 287 delete( rest ); … … 305 289 306 290 // CFA allocation/deallocation and constructor/destructor, array types 307 forall( T & | sized(T), Parms ... | { void ?{}( T &, Parms ); } ) T * anew( size_t dim, Parmsp );291 forall( T & | sized(T), TT... | { void ?{}( T &, TT ); } ) T * anew( size_t dim, TT p ); 308 292 forall( T & | sized(T) | { void ^?{}( T & ); } ) void adelete( T arr[] ); 309 forall( T & | sized(T) | { void ^?{}( T & ); }, List ... | { void adelete( List ); } ) void adelete( T arr[], List rest ); 310 293 forall( T & | sized(T) | { void ^?{}( T & ); }, TT... | { void adelete( TT ); } ) void adelete( T arr[], TT rest ); 311 294 //--------------------------------------- 312 295
Note:
See TracChangeset
for help on using the changeset viewer.