Changeset 9c47a47 for src/libcfa/stdlib.c
- Timestamp:
- Dec 28, 2017, 9:56:28 PM (5 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, 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:
- 853451b
- Parents:
- e672372
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/libcfa/stdlib.c
re672372 r9c47a47 10 10 // Created On : Thu Jan 28 17:10:29 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Dec 24 13:00:15201713 // Update Count : 3 4412 // Last Modified On : Thu Dec 28 18:43:16 2017 13 // Update Count : 378 14 14 // 15 15 … … 128 128 //--------------------------------------- 129 129 130 forall( otype T | { int ?<?( T, T); } )131 T * bsearch( T key, const T* arr, size_t dim ) {132 int comp( const void * t1, const void * t2 ) { return *( T *)t1 < *(T *)t2 ? -1 : *(T *)t2 < *(T*)t1 ? 1 : 0; }133 return ( T *)bsearch( &key, arr, dim, sizeof(T), comp );130 forall( otype E | { int ?<?( E, E ); } ) 131 E * bsearch( E key, const E * arr, size_t dim ) { 132 int comp( const void * t1, const void * t2 ) { return *(E *)t1 < *(E *)t2 ? -1 : *(E *)t2 < *(E *)t1 ? 1 : 0; } 133 return (E *)bsearch( &key, arr, dim, sizeof(E), comp ); 134 134 } // bsearch 135 135 136 forall( otype T | { int ?<?( T, T); } )137 unsigned int bsearch( T key, const T* arr, size_t dim ) {138 T* result = bsearch( key, arr, dim );139 return result ? result - arr : dim; // pointer subtraction includes sizeof( T)136 forall( otype E | { int ?<?( E, E ); } ) 137 unsigned int bsearch( E key, const E * arr, size_t dim ) { 138 E * result = bsearch( key, arr, dim ); 139 return result ? result - arr : dim; // pointer subtraction includes sizeof(E) 140 140 } // bsearch 141 141 142 forall( otype T | { int ?<?( T, T ); } ) 143 void qsort( const T * arr, size_t dim ) { 144 int comp( const void * t1, const void * t2 ) { return *(T *)t1 < *(T *)t2 ? -1 : *(T *)t2 < *(T *)t1 ? 1 : 0; } 145 qsort( arr, dim, sizeof(T), comp ); 142 forall( otype K, otype E | { int ?<?( K, K ); K getKey( E & ); } ) 143 E * bsearch( K key, const E * arr, size_t dim ) { 144 int comp( const void * t1, const void * t2 ) { return *(K *)t1 < getKey( *(E *)t2 ) ? -1 : getKey( *(E *)t2 ) < *(K *)t1 ? 1 : 0; } 145 return (E *)bsearch( &key, arr, dim, sizeof(E), comp ); 146 } // bsearch 147 148 forall( otype K, otype E | { int ?<?( K, K ); K getKey( E & ); } ) 149 unsigned int bsearch( K key, const E * arr, size_t dim ) { 150 E * result = bsearch( key, arr, dim ); 151 return result ? result - arr : dim; // pointer subtraction includes sizeof(E) 152 } // bsearch 153 154 forall( otype E | { int ?<?( E, E ); } ) 155 void qsort( E * arr, size_t dim ) { 156 int comp( const void * t1, const void * t2 ) { return *(E *)t1 < *(E *)t2 ? -1 : *(E *)t2 < *(E *)t1 ? 1 : 0; } 157 qsort( arr, dim, sizeof(E), comp ); 146 158 } // qsort 147 159
Note: See TracChangeset
for help on using the changeset viewer.