Changes in src/libcfa/stdlib [3ce0d440:e9a7e90b]
- File:
-
- 1 edited
-
src/libcfa/stdlib (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/libcfa/stdlib
r3ce0d440 re9a7e90b 10 10 // Created On : Thu Jan 28 17:12:35 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Jun 2 08:46:35201813 // Update Count : 30 612 // Last Modified On : Wed May 16 07:53:10 2018 13 // Update Count : 300 14 14 // 15 15 16 16 #pragma once 17 17 18 #include <stdlib.h> // allocation, strto*, *abs 19 extern "C" { 20 void * memalign( size_t align, size_t size ); 21 void * aligned_alloc( size_t align, size_t size ); 22 void * memset( void * dest, int c, size_t size ); 23 } // extern "C" 18 #include <stdlib.h> // strto*, *abs 24 19 25 20 //--------------------------------------- … … 32 27 //--------------------------------------- 33 28 29 // C dynamic allocation 34 30 static inline forall( dtype T | sized(T) ) { 35 // C dynamic allocation36 37 31 T * malloc( void ) { 38 32 // printf( "* malloc\n" ); … … 57 51 } // realloc 58 52 53 extern "C" { void * memalign( size_t align, size_t size ); } // use default C routine for void * 59 54 T * memalign( size_t align ) { 60 55 //printf( "X4\n" ); … … 62 57 } // memalign 63 58 59 extern "C" { void * aligned_alloc( size_t align, size_t size ); } // use default C routine for void * 64 60 T * aligned_alloc( size_t align ) { 65 61 //printf( "X5\n" ); … … 74 70 75 71 // Cforall dynamic allocation 72 extern "C" { void * memset( void * dest, int c, size_t size ); } // use default C routine for void * 76 73 77 74 T * alloc( void ) { … … 106 103 forall( dtype T | sized(T) ) T * alloc( T ptr[], size_t dim, char fill ); 107 104 108 109 static inline forall( dtype T | sized(T) ) { 110 T * align_alloc( size_t align ) { 111 //printf( "X13\n" ); 112 return (T *)memalign( align, sizeof(T) ); 113 } // align_alloc 114 115 T * align_alloc( size_t align, char fill ) { 116 //printf( "X14\n" ); 117 T * ptr = (T *)memalign( align, sizeof(T) ); 118 return (T *)memset( ptr, (int)fill, sizeof(T) ); 119 } // align_alloc 120 121 T * align_alloc( size_t align, size_t dim ) { 122 //printf( "X15\n" ); 123 return (T *)memalign( align, dim * sizeof(T) ); 124 } // align_alloc 125 126 T * align_alloc( size_t align, size_t dim, char fill ) { 127 //printf( "X16\n" ); 128 T * ptr = (T *)memalign( align, dim * sizeof(T) ); 129 return (T *)memset( ptr, (int)fill, dim * sizeof(T) ); 130 } // align_alloc 131 } // distribution 132 133 134 static inline forall( dtype T | sized(T) ) { 135 // data, non-array types 136 137 T * memset( T * dest, char c ) { 138 //printf( "X17\n" ); 139 return (T *)memset( dest, c, sizeof(T) ); 140 } // memset 141 142 extern "C" { void * memcpy( void * dest, const void * src, size_t size ); } // use default C routine for void * 143 144 T * memcpy( T * dest, const T * src ) { 145 //printf( "X18\n" ); 146 return (T *)memcpy( dest, src, sizeof(T) ); 147 } // memcpy 148 } // distribution 149 150 static inline forall( dtype T | sized(T) ) { 151 // data, array types 152 153 T * memset( T dest[], size_t dim, char c ) { 154 //printf( "X19\n" ); 155 return (T *)(void *)memset( dest, c, dim * sizeof(T) ); // C memset 156 } // memset 157 158 T * memcpy( T dest[], const T src[], size_t dim ) { 159 //printf( "X20\n" ); 160 return (T *)(void *)memcpy( dest, src, dim * sizeof(T) ); // C memcpy 161 } // memcpy 162 } // distribution 105 static inline forall( dtype T | sized(T) ) T * align_alloc( size_t align ) { 106 //printf( "X13\n" ); 107 return (T *)memalign( align, sizeof(T) ); 108 } // align_alloc 109 static inline forall( dtype T | sized(T) ) T * align_alloc( size_t align, char fill ) { 110 //printf( "X14\n" ); 111 T * ptr = (T *)memalign( align, sizeof(T) ); 112 return (T *)memset( ptr, (int)fill, sizeof(T) ); 113 } // align_alloc 114 115 static inline forall( dtype T | sized(T) ) T * align_alloc( size_t align, size_t dim ) { 116 //printf( "X15\n" ); 117 return (T *)memalign( align, dim * sizeof(T) ); 118 } // align_alloc 119 static inline forall( dtype T | sized(T) ) T * align_alloc( size_t align, size_t dim, char fill ) { 120 //printf( "X16\n" ); 121 T * ptr = (T *)memalign( align, dim * sizeof(T) ); 122 return (T *)memset( ptr, (int)fill, dim * sizeof(T) ); 123 } // align_alloc 124 125 126 // data, non-array types 127 static inline forall( dtype T | sized(T) ) T * memset( T * dest, char c ) { 128 //printf( "X17\n" ); 129 return (T *)memset( dest, c, sizeof(T) ); 130 } // memset 131 extern "C" { void * memcpy( void * dest, const void * src, size_t size ); } // use default C routine for void * 132 static inline forall( dtype T | sized(T) ) T * memcpy( T * dest, const T * src ) { 133 //printf( "X18\n" ); 134 return (T *)memcpy( dest, src, sizeof(T) ); 135 } // memcpy 136 137 // data, array types 138 static inline forall( dtype T | sized(T) ) T * memset( T dest[], size_t dim, char c ) { 139 //printf( "X19\n" ); 140 return (T *)(void *)memset( dest, c, dim * sizeof(T) ); // C memset 141 } // memset 142 static inline forall( dtype T | sized(T) ) T * memcpy( T dest[], const T src[], size_t dim ) { 143 //printf( "X20\n" ); 144 return (T *)(void *)memcpy( dest, src, dim * sizeof(T) ); // C memcpy 145 } // memcpy 163 146 164 147 // allocation/deallocation and constructor/destructor, non-array types … … 206 189 //--------------------------------------- 207 190 208 forall( otype E | { int ?<?( E, E ); } ) { 209 E * bsearch( E key, const E * vals, size_t dim ); 210 size_t bsearch( E key, const E * vals, size_t dim ); 211 E * bsearchl( E key, const E * vals, size_t dim ); 212 size_t bsearchl( E key, const E * vals, size_t dim ); 213 E * bsearchu( E key, const E * vals, size_t dim ); 214 size_t bsearchu( E key, const E * vals, size_t dim ); 215 216 void qsort( E * vals, size_t dim ); 217 } // distribution 218 219 forall( otype K, otype E | { int ?<?( K, K ); K getKey( const E & ); } ) { 220 E * bsearch( K key, const E * vals, size_t dim ); 221 size_t bsearch( K key, const E * vals, size_t dim ); 222 E * bsearchl( K key, const E * vals, size_t dim ); 223 size_t bsearchl( K key, const E * vals, size_t dim ); 224 E * bsearchu( K key, const E * vals, size_t dim ); 225 size_t bsearchu( K key, const E * vals, size_t dim ); 226 } // distribution 191 forall( otype E | { int ?<?( E, E ); } ) 192 E * bsearch( E key, const E * vals, size_t dim ); 193 194 forall( otype E | { int ?<?( E, E ); } ) 195 size_t bsearch( E key, const E * vals, size_t dim ); 196 197 forall( otype K, otype E | { int ?<?( K, K ); K getKey( const E & ); } ) 198 E * bsearch( K key, const E * vals, size_t dim ); 199 200 forall( otype K, otype E | { int ?<?( K, K ); K getKey( const E & ); } ) 201 size_t bsearch( K key, const E * vals, size_t dim ); 202 203 204 forall( otype E | { int ?<?( E, E ); } ) 205 E * bsearchl( E key, const E * vals, size_t dim ); 206 207 forall( otype E | { int ?<?( E, E ); } ) 208 size_t bsearchl( E key, const E * vals, size_t dim ); 209 210 forall( otype K, otype E | { int ?<?( K, K ); K getKey( const E & ); } ) 211 E * bsearchl( K key, const E * vals, size_t dim ); 212 213 forall( otype K, otype E | { int ?<?( K, K ); K getKey( const E & ); } ) 214 size_t bsearchl( K key, const E * vals, size_t dim ); 215 216 217 forall( otype E | { int ?<?( E, E ); } ) 218 E * bsearchu( E key, const E * vals, size_t dim ); 219 220 forall( otype E | { int ?<?( E, E ); } ) 221 size_t bsearchu( E key, const E * vals, size_t dim ); 222 223 forall( otype K, otype E | { int ?<?( K, K ); K getKey( const E & ); } ) 224 E * bsearchu( K key, const E * vals, size_t dim ); 225 226 forall( otype K, otype E | { int ?<?( K, K ); K getKey( const E & ); } ) 227 size_t bsearchu( K key, const E * vals, size_t dim ); 228 229 230 forall( otype E | { int ?<?( E, E ); } ) 231 void qsort( E * vals, size_t dim ); 227 232 228 233 //---------------------------------------
Note:
See TracChangeset
for help on using the changeset viewer.