Changes in libcfa/src/stdlib.hfa [b6a71bc:8f650f0]
- File:
-
- 1 edited
-
libcfa/src/stdlib.hfa (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/stdlib.hfa
rb6a71bc r8f650f0 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 12 07:39:15202413 // Update Count : 81212 // Last Modified On : Sun Mar 17 08:25:31 2024 13 // Update Count : 796 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 { char c; T * a; T t; };112 struct S_fill { char tag; U_fill(T) fill; };113 struct S_realloc { inline T *; };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 ) { 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; }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 { inline size_t; } T_align;151 typedef struct S_resize { inline void *; } T_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 { char tag; char c; size_t size; T * at; char t[50]; };155 struct S_realloc { inline T *; };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 161 extern "C" ssize_t write(int fd, const void *buf, size_t count); 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 162 161 static inline forall( T & | sized(T) ) { 163 162 S_fill(T) ?`fill ( T t ) { … … 170 169 return ret; 171 170 } 172 S_fill(T) ?`fill ( zero_t ) = void; // FIX ME: remove this once ticket 214 is resolved173 S_fill(T) ?`fill ( T * a ){ return (S_fill(T)){ 'T', '0', 0, a }; } // FIX ME: remove this once ticket 214 is resolved174 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}; }171 S_fill(T) ?`fill ( zero_t ) = void; // FIX ME: remove this once ticket 214 is resolved 172 S_fill(T) ?`fill ( T * a ) { return (S_fill(T)){ 'T', '0', 0, a }; } // FIX ME: remove this once ticket 214 is resolved 173 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}; } 178 177 179 178 T * alloc_internal$( void * Resize, T * Realloc, size_t Align, size_t Dim, S_fill(T) Fill ) { … … 183 182 184 183 if ( Resize ) { 185 ptr = (T*) (void *)resize( (void *)Resize, Align, Dim * size );184 ptr = (T*) (void *) resize( (void *)Resize, Align, Dim * size ); 186 185 } else if ( Realloc ) { 187 186 if ( Fill.tag != '0' ) copy_end = min(malloc_size( Realloc ), Dim * size ); 188 ptr = (T *) (void *)realloc( (void *)Realloc, Align, Dim * size );187 ptr = (T *) (void *) realloc( (void *)Realloc, Align, Dim * size ); 189 188 } else { 190 ptr = (T *) (void *) memalign( Align, Dim * size );189 ptr = (T *) (void *) memalign( Align, Dim * size ); 191 190 } 192 191
Note:
See TracChangeset
for help on using the changeset viewer.