- Timestamp:
- Apr 12, 2024, 7:40:17 AM (3 weeks ago)
- Branches:
- master
- Children:
- 6dd4091
- Parents:
- d9bad51
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/stdlib.hfa
rd9bad51 rb6a71bc 10 10 // Created On : Thu Jan 28 17:12:35 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Mar 17 08:25:31202413 // Update Count : 79612 // Last Modified On : Fri Apr 12 07:39:15 2024 13 // Update Count : 812 14 14 // 15 15 … … 109 109 1. Replace the current forall-block that contains defintions of S_fill and S_realloc with following: 110 110 forall( T & | sized(T) ) { 111 union U_fill 112 struct S_fill 113 struct S_realloc 111 union U_fill { char c; T * a; T t; }; 112 struct S_fill { char tag; U_fill(T) fill; }; 113 struct S_realloc { inline T *; }; 114 114 } 115 115 116 116 2. Replace all current postfix-fill functions with following for updated S_fill: 117 S_fill(T) ?`fill( char a ) 118 S_fill(T) ?`fill( T a ){ S_fill(T) ret = {'t'}; memcpy(&ret.fill.t, &a, sizeof(T)); return ret; }119 S_fill(T) ?`fill( T a[], size_t nmemb ){ S_fill(T) ret = {'a', nmemb}; ret.fill.a = a; return ret; }117 S_fill(T) ?`fill( char a ) { S_fill(T) ret = {'c'}; ret.fill.c = a; return ret; } 118 S_fill(T) ?`fill( T a ) { S_fill(T) ret = {'t'}; memcpy(&ret.fill.t, &a, sizeof(T)); return ret; } 119 S_fill(T) ?`fill( T a[], size_t nmemb ) { S_fill(T) ret = {'a', nmemb}; ret.fill.a = a; return ret; } 120 120 121 121 3. Replace the alloc_internal$ function which is outside ttype forall-block with following function: … … 148 148 */ 149 149 150 typedef struct S_align 151 typedef struct S_resize 150 typedef struct S_align { inline size_t; } T_align; 151 typedef struct S_resize { inline void *; } T_resize; 152 152 153 153 forall( T & ) { 154 struct S_fill 155 struct S_realloc 154 struct S_fill { char tag; char c; size_t size; T * at; char t[50]; }; 155 struct S_realloc { inline T *; }; 156 156 } 157 157 158 static inline T_align ?`align ( size_t a ) { return (T_align){a}; } 159 static inline T_resize ?`resize ( void * a ) { return (T_resize){a}; } 160 158 static inline T_align ?`align( size_t a ) { return (T_align){a}; } 159 static inline T_resize ?`resize( void * a ) { return (T_resize){a}; } 160 161 extern "C" ssize_t write(int fd, const void *buf, size_t count); 161 162 static inline forall( T & | sized(T) ) { 162 163 S_fill(T) ?`fill ( T t ) { … … 169 170 return ret; 170 171 } 171 S_fill(T) 172 S_fill(T) ?`fill ( T * a ){ return (S_fill(T)){ 'T', '0', 0, a }; } // FIX ME: remove this once ticket 214 is resolved173 S_fill(T) ?`fill ( char c ){ return (S_fill(T)){ 'c', c }; }174 S_fill(T) ?`fill ( T a[], size_t nmemb ){ return (S_fill(T)){ 'a', '0', nmemb * sizeof(T), a }; }175 176 S_realloc(T) ?`realloc ( T * a ){ return (S_realloc(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 }; } 176 177 S_realloc(T) ?`realloc ( T * a ) { return (S_realloc(T)){a}; } 177 178 178 179 T * alloc_internal$( void * Resize, T * Realloc, size_t Align, size_t Dim, S_fill(T) Fill ) { … … 182 183 183 184 if ( Resize ) { 184 ptr = (T*) (void *)resize( (void *)Resize, Align, Dim * size );185 ptr = (T*)(void *)resize( (void *)Resize, Align, Dim * size ); 185 186 } else if ( Realloc ) { 186 187 if ( Fill.tag != '0' ) copy_end = min(malloc_size( Realloc ), Dim * size ); 187 ptr = (T *) (void *)realloc( (void *)Realloc, Align, Dim * size );188 ptr = (T *)(void *)realloc( (void *)Realloc, Align, Dim * size ); 188 189 } else { 189 ptr = (T *) 190 ptr = (T *)(void *) memalign( Align, Dim * size ); 190 191 } 191 192
Note: See TracChangeset
for help on using the changeset viewer.