Sat, 10 Aug 2019 08:44:36 +0200
adds a broader set of compare and distance functions
src/ucx/utils.h | file | annotate | diff | comparison | revisions | |
src/utils.c | file | annotate | diff | comparison | revisions |
1.1 --- a/src/ucx/utils.h Wed Aug 07 23:23:58 2019 +0200 1.2 +++ b/src/ucx/utils.h Sat Aug 10 08:44:36 2019 +0200 1.3 @@ -184,6 +184,105 @@ 1.4 */ 1.5 int ucx_cmp_longint(const void *i1, const void *i2, void *data); 1.6 1.7 +/** 1.8 + * Compares two integers of type long long. 1.9 + * @param i1 pointer to long long one 1.10 + * @param i2 pointer to long long two 1.11 + * @param data omitted 1.12 + * @return -1, if *i1 is less than *i2, 0 if both are equal, 1.13 + * 1 if *i1 is greater than *i2 1.14 + */ 1.15 +int ucx_cmp_longlong(const void *i1, const void *i2, void *data); 1.16 + 1.17 +/** 1.18 + * Compares two integers of type int16_t. 1.19 + * @param i1 pointer to int16_t one 1.20 + * @param i2 pointer to int16_t two 1.21 + * @param data omitted 1.22 + * @return -1, if *i1 is less than *i2, 0 if both are equal, 1.23 + * 1 if *i1 is greater than *i2 1.24 + */ 1.25 +int ucx_cmp_int16(const void *i1, const void *i2, void *data); 1.26 + 1.27 +/** 1.28 + * Compares two integers of type int32_t. 1.29 + * @param i1 pointer to int32_t one 1.30 + * @param i2 pointer to int32_t two 1.31 + * @param data omitted 1.32 + * @return -1, if *i1 is less than *i2, 0 if both are equal, 1.33 + * 1 if *i1 is greater than *i2 1.34 + */ 1.35 +int ucx_cmp_int32(const void *i1, const void *i2, void *data); 1.36 + 1.37 +/** 1.38 + * Compares two integers of type int64_t. 1.39 + * @param i1 pointer to int64_t one 1.40 + * @param i2 pointer to int64_t two 1.41 + * @param data omitted 1.42 + * @return -1, if *i1 is less than *i2, 0 if both are equal, 1.43 + * 1 if *i1 is greater than *i2 1.44 + */ 1.45 +int ucx_cmp_int64(const void *i1, const void *i2, void *data); 1.46 + 1.47 +/** 1.48 + * Compares two integers of type unsigned int. 1.49 + * @param i1 pointer to unsigned integer one 1.50 + * @param i2 pointer to unsigned integer two 1.51 + * @param data omitted 1.52 + * @return -1, if *i1 is less than *i2, 0 if both are equal, 1.53 + * 1 if *i1 is greater than *i2 1.54 + */ 1.55 +int ucx_cmp_uint(const void *i1, const void *i2, void *data); 1.56 + 1.57 +/** 1.58 + * Compares two integers of type unsigned long int. 1.59 + * @param i1 pointer to unsigned long integer one 1.60 + * @param i2 pointer to unsigned long integer two 1.61 + * @param data omitted 1.62 + * @return -1, if *i1 is less than *i2, 0 if both are equal, 1.63 + * 1 if *i1 is greater than *i2 1.64 + */ 1.65 +int ucx_cmp_ulongint(const void *i1, const void *i2, void *data); 1.66 + 1.67 +/** 1.68 + * Compares two integers of type unsigned long long. 1.69 + * @param i1 pointer to unsigned long long one 1.70 + * @param i2 pointer to unsigned long long two 1.71 + * @param data omitted 1.72 + * @return -1, if *i1 is less than *i2, 0 if both are equal, 1.73 + * 1 if *i1 is greater than *i2 1.74 + */ 1.75 +int ucx_cmp_ulonglong(const void *i1, const void *i2, void *data); 1.76 + 1.77 +/** 1.78 + * Compares two integers of type uint16_t. 1.79 + * @param i1 pointer to uint16_t one 1.80 + * @param i2 pointer to uint16_t two 1.81 + * @param data omitted 1.82 + * @return -1, if *i1 is less than *i2, 0 if both are equal, 1.83 + * 1 if *i1 is greater than *i2 1.84 + */ 1.85 +int ucx_cmp_uint16(const void *i1, const void *i2, void *data); 1.86 + 1.87 +/** 1.88 + * Compares two integers of type uint32_t. 1.89 + * @param i1 pointer to uint32_t one 1.90 + * @param i2 pointer to uint32_t two 1.91 + * @param data omitted 1.92 + * @return -1, if *i1 is less than *i2, 0 if both are equal, 1.93 + * 1 if *i1 is greater than *i2 1.94 + */ 1.95 +int ucx_cmp_uint32(const void *i1, const void *i2, void *data); 1.96 + 1.97 +/** 1.98 + * Compares two integers of type uint64_t. 1.99 + * @param i1 pointer to uint64_t one 1.100 + * @param i2 pointer to uint64_t two 1.101 + * @param data omitted 1.102 + * @return -1, if *i1 is less than *i2, 0 if both are equal, 1.103 + * 1 if *i1 is greater than *i2 1.104 + */ 1.105 +int ucx_cmp_uint64(const void *i1, const void *i2, void *data); 1.106 1.107 /** 1.108 * Distance function for integers of type int. 1.109 @@ -204,6 +303,96 @@ 1.110 intmax_t ucx_dist_longint(const void *i1, const void *i2, void *data); 1.111 1.112 /** 1.113 + * Distance function for integers of type long long. 1.114 + * @param i1 pointer to long long one 1.115 + * @param i2 pointer to long long two 1.116 + * @param data omitted 1.117 + * @return i1 minus i2 1.118 + */ 1.119 +intmax_t ucx_dist_longlong(const void *i1, const void *i2, void *data); 1.120 + 1.121 +/** 1.122 + * Distance function for integers of type int16_t. 1.123 + * @param i1 pointer to int16_t one 1.124 + * @param i2 pointer to int16_t two 1.125 + * @param data omitted 1.126 + * @return i1 minus i2 1.127 + */ 1.128 +intmax_t ucx_dist_int16(const void *i1, const void *i2, void *data); 1.129 + 1.130 +/** 1.131 + * Distance function for integers of type int32_t. 1.132 + * @param i1 pointer to int32_t one 1.133 + * @param i2 pointer to int32_t two 1.134 + * @param data omitted 1.135 + * @return i1 minus i2 1.136 + */ 1.137 +intmax_t ucx_dist_int32(const void *i1, const void *i2, void *data); 1.138 + 1.139 +/** 1.140 + * Distance function for integers of type int64_t. 1.141 + * @param i1 pointer to int64_t one 1.142 + * @param i2 pointer to int64_t two 1.143 + * @param data omitted 1.144 + * @return i1 minus i2 1.145 + */ 1.146 +intmax_t ucx_dist_int64(const void *i1, const void *i2, void *data); 1.147 + 1.148 +/** 1.149 + * Distance function for integers of type unsigned int. 1.150 + * @param i1 pointer to unsigned integer one 1.151 + * @param i2 pointer to unsigned integer two 1.152 + * @param data omitted 1.153 + * @return i1 minus i2 1.154 + */ 1.155 +intmax_t ucx_dist_uint(const void *i1, const void *i2, void *data); 1.156 + 1.157 +/** 1.158 + * Distance function for integers of type unsigned long int. 1.159 + * @param i1 pointer to unsigned long integer one 1.160 + * @param i2 pointer to unsigned long integer two 1.161 + * @param data omitted 1.162 + * @return i1 minus i2 1.163 + */ 1.164 +intmax_t ucx_dist_ulongint(const void *i1, const void *i2, void *data); 1.165 + 1.166 +/** 1.167 + * Distance function for integers of type unsigned long long. 1.168 + * @param i1 pointer to unsigned long long one 1.169 + * @param i2 pointer to unsigned long long two 1.170 + * @param data omitted 1.171 + * @return i1 minus i2 1.172 + */ 1.173 +intmax_t ucx_dist_ulonglong(const void *i1, const void *i2, void *data); 1.174 + 1.175 +/** 1.176 + * Distance function for integers of type uint16_t. 1.177 + * @param i1 pointer to uint16_t one 1.178 + * @param i2 pointer to uint16_t two 1.179 + * @param data omitted 1.180 + * @return i1 minus i2 1.181 + */ 1.182 +intmax_t ucx_dist_uint16(const void *i1, const void *i2, void *data); 1.183 + 1.184 +/** 1.185 + * Distance function for integers of type uint32_t. 1.186 + * @param i1 pointer to uint32_t one 1.187 + * @param i2 pointer to uint32_t two 1.188 + * @param data omitted 1.189 + * @return i1 minus i2 1.190 + */ 1.191 +intmax_t ucx_dist_uint32(const void *i1, const void *i2, void *data); 1.192 + 1.193 +/** 1.194 + * Distance function for integers of type uint64_t. 1.195 + * @param i1 pointer to uint64_t one 1.196 + * @param i2 pointer to uint64_t two 1.197 + * @param data omitted 1.198 + * @return i1 minus i2 1.199 + */ 1.200 +intmax_t ucx_dist_uint64(const void *i1, const void *i2, void *data); 1.201 + 1.202 +/** 1.203 * Compares two real numbers of type float. 1.204 * @param f1 pointer to float one 1.205 * @param f2 pointer to float two
2.1 --- a/src/utils.c Wed Aug 07 23:23:58 2019 +0200 2.2 +++ b/src/utils.c Sat Aug 10 08:44:36 2019 +0200 2.3 @@ -113,8 +113,108 @@ 2.4 } 2.5 2.6 int ucx_cmp_longint(const void *i1, const void *i2, void *data) { 2.7 - int a = *((const long int*) i1); 2.8 - int b = *((const long int*) i2); 2.9 + long int a = *((const long int*) i1); 2.10 + long int b = *((const long int*) i2); 2.11 + if (a == b) { 2.12 + return 0; 2.13 + } else { 2.14 + return a < b ? -1 : 1; 2.15 + } 2.16 +} 2.17 + 2.18 +int ucx_cmp_longlong(const void *i1, const void *i2, void *data) { 2.19 + long long a = *((const long long*) i1); 2.20 + long long b = *((const long long*) i2); 2.21 + if (a == b) { 2.22 + return 0; 2.23 + } else { 2.24 + return a < b ? -1 : 1; 2.25 + } 2.26 +} 2.27 + 2.28 +int ucx_cmp_int16(const void *i1, const void *i2, void *data) { 2.29 + int16_t a = *((const int16_t*) i1); 2.30 + int16_t b = *((const int16_t*) i2); 2.31 + if (a == b) { 2.32 + return 0; 2.33 + } else { 2.34 + return a < b ? -1 : 1; 2.35 + } 2.36 +} 2.37 + 2.38 +int ucx_cmp_int32(const void *i1, const void *i2, void *data) { 2.39 + int32_t a = *((const int32_t*) i1); 2.40 + int32_t b = *((const int32_t*) i2); 2.41 + if (a == b) { 2.42 + return 0; 2.43 + } else { 2.44 + return a < b ? -1 : 1; 2.45 + } 2.46 +} 2.47 + 2.48 +int ucx_cmp_int64(const void *i1, const void *i2, void *data) { 2.49 + int64_t a = *((const int64_t*) i1); 2.50 + int64_t b = *((const int64_t*) i2); 2.51 + if (a == b) { 2.52 + return 0; 2.53 + } else { 2.54 + return a < b ? -1 : 1; 2.55 + } 2.56 +} 2.57 + 2.58 +int ucx_cmp_uint(const void *i1, const void *i2, void *data) { 2.59 + unsigned int a = *((const unsigned int*) i1); 2.60 + unsigned int b = *((const unsigned int*) i2); 2.61 + if (a == b) { 2.62 + return 0; 2.63 + } else { 2.64 + return a < b ? -1 : 1; 2.65 + } 2.66 +} 2.67 + 2.68 +int ucx_cmp_ulongint(const void *i1, const void *i2, void *data) { 2.69 + unsigned long int a = *((const unsigned long int*) i1); 2.70 + unsigned long int b = *((const unsigned long int*) i2); 2.71 + if (a == b) { 2.72 + return 0; 2.73 + } else { 2.74 + return a < b ? -1 : 1; 2.75 + } 2.76 +} 2.77 + 2.78 +int ucx_cmp_ulonglong(const void *i1, const void *i2, void *data) { 2.79 + unsigned long long a = *((const unsigned long long*) i1); 2.80 + unsigned long long b = *((const unsigned long long*) i2); 2.81 + if (a == b) { 2.82 + return 0; 2.83 + } else { 2.84 + return a < b ? -1 : 1; 2.85 + } 2.86 +} 2.87 + 2.88 +int ucx_cmp_uint16(const void *i1, const void *i2, void *data) { 2.89 + uint16_t a = *((const uint16_t*) i1); 2.90 + uint16_t b = *((const uint16_t*) i2); 2.91 + if (a == b) { 2.92 + return 0; 2.93 + } else { 2.94 + return a < b ? -1 : 1; 2.95 + } 2.96 +} 2.97 + 2.98 +int ucx_cmp_uint32(const void *i1, const void *i2, void *data) { 2.99 + uint32_t a = *((const uint32_t*) i1); 2.100 + uint32_t b = *((const uint32_t*) i2); 2.101 + if (a == b) { 2.102 + return 0; 2.103 + } else { 2.104 + return a < b ? -1 : 1; 2.105 + } 2.106 +} 2.107 + 2.108 +int ucx_cmp_uint64(const void *i1, const void *i2, void *data) { 2.109 + uint64_t a = *((const uint64_t*) i1); 2.110 + uint64_t b = *((const uint64_t*) i2); 2.111 if (a == b) { 2.112 return 0; 2.113 } else { 2.114 @@ -134,6 +234,66 @@ 2.115 return a - b; 2.116 } 2.117 2.118 +intmax_t ucx_dist_longlong(const void *i1, const void *i2, void *data) { 2.119 + intmax_t a = *((const long long*) i1); 2.120 + intmax_t b = *((const long long*) i2); 2.121 + return a - b; 2.122 +} 2.123 + 2.124 +intmax_t ucx_dist_int16(const void *i1, const void *i2, void *data) { 2.125 + intmax_t a = *((const int16_t*) i1); 2.126 + intmax_t b = *((const int16_t*) i2); 2.127 + return a - b; 2.128 +} 2.129 + 2.130 +intmax_t ucx_dist_int32(const void *i1, const void *i2, void *data) { 2.131 + intmax_t a = *((const int32_t*) i1); 2.132 + intmax_t b = *((const int32_t*) i2); 2.133 + return a - b; 2.134 +} 2.135 + 2.136 +intmax_t ucx_dist_int64(const void *i1, const void *i2, void *data) { 2.137 + intmax_t a = *((const int64_t*) i1); 2.138 + intmax_t b = *((const int64_t*) i2); 2.139 + return a - b; 2.140 +} 2.141 + 2.142 +intmax_t ucx_dist_uint(const void *i1, const void *i2, void *data) { 2.143 + uintmax_t a = *((const unsigned int*) i1); 2.144 + uintmax_t b = *((const unsigned int*) i2); 2.145 + return a > b ? (intmax_t)(a - b) : -(intmax_t)(b - a); 2.146 +} 2.147 + 2.148 +intmax_t ucx_dist_ulongint(const void *i1, const void *i2, void *data) { 2.149 + uintmax_t a = *((const unsigned long int*) i1); 2.150 + uintmax_t b = *((const unsigned long int*) i2); 2.151 + return a > b ? (intmax_t)(a - b) : -(intmax_t)(b - a); 2.152 +} 2.153 + 2.154 +intmax_t ucx_dist_ulonglong(const void *i1, const void *i2, void *data) { 2.155 + uintmax_t a = *((const unsigned long long*) i1); 2.156 + uintmax_t b = *((const unsigned long long*) i2); 2.157 + return a > b ? (intmax_t)(a - b) : -(intmax_t)(b - a); 2.158 +} 2.159 + 2.160 +intmax_t ucx_dist_uint16(const void *i1, const void *i2, void *data) { 2.161 + uintmax_t a = *((const uint16_t*) i1); 2.162 + uintmax_t b = *((const uint16_t*) i2); 2.163 + return a > b ? (intmax_t)(a - b) : -(intmax_t)(b - a); 2.164 +} 2.165 + 2.166 +intmax_t ucx_dist_uint32(const void *i1, const void *i2, void *data) { 2.167 + uintmax_t a = *((const uint32_t*) i1); 2.168 + uintmax_t b = *((const uint32_t*) i2); 2.169 + return a > b ? (intmax_t)(a - b) : -(intmax_t)(b - a); 2.170 +} 2.171 + 2.172 +intmax_t ucx_dist_uint64(const void *i1, const void *i2, void *data) { 2.173 + uintmax_t a = *((const uint64_t*) i1); 2.174 + uintmax_t b = *((const uint64_t*) i2); 2.175 + return a > b ? (intmax_t)(a - b) : -(intmax_t)(b - a); 2.176 +} 2.177 + 2.178 int ucx_cmp_float(const void *f1, const void *f2, void *epsilon) { 2.179 float a = *((const float*) f1); 2.180 float b = *((const float*) f2);