Mon, 18 Dec 2023 16:04:21 +0100
add cx_cmp_ptr() - fix #340
CHANGELOG | file | annotate | diff | comparison | revisions | |
src/compare.c | file | annotate | diff | comparison | revisions | |
src/cx/compare.h | file | annotate | diff | comparison | revisions | |
tests/test_compare.cpp | file | annotate | diff | comparison | revisions |
1.1 --- a/CHANGELOG Mon Dec 18 15:13:26 2023 +0100 1.2 +++ b/CHANGELOG Mon Dec 18 16:04:21 2023 +0100 1.3 @@ -1,6 +1,7 @@ 1.4 Version 3.1 - tbd. 1.5 ------------------------ 1.6 * adds cxBufferReset() 1.7 + * adds cx_cmp_ptr() 1.8 * fixes wrong link from UCX 2 documentation to UCX 3 documentation 1.9 * removes CMake, except for tests at the moment, in favor of uwproj 1.10
2.1 --- a/src/compare.c Mon Dec 18 15:13:26 2023 +0100 2.2 +++ b/src/compare.c Mon Dec 18 16:04:21 2023 +0100 2.3 @@ -199,3 +199,15 @@ 2.4 } 2.5 } 2.6 2.7 +int cx_cmp_ptr( 2.8 + void const *ptr1, 2.9 + void const *ptr2 2.10 +) { 2.11 + uintptr_t p1 = (uintptr_t) ptr1; 2.12 + uintptr_t p2 = (uintptr_t) ptr2; 2.13 + if (p1 == p2) { 2.14 + return 0; 2.15 + } else { 2.16 + return p1 < p2 ? -1 : 1; 2.17 + } 2.18 +}
3.1 --- a/src/cx/compare.h Mon Dec 18 15:13:26 2023 +0100 3.2 +++ b/src/cx/compare.h Mon Dec 18 16:04:21 2023 +0100 3.3 @@ -212,6 +212,19 @@ 3.4 void const *ptr2 3.5 ); 3.6 3.7 +/** 3.8 + * Compares the pointers specified in the arguments without de-referencing. 3.9 + * 3.10 + * @param ptr1 pointer one 3.11 + * @param ptr2 pointer two 3.12 + * @return -1 if ptr1 is less than ptr2, 0 if both are equal, 3.13 + * 1 if ptr1 is greater than ptr2 3.14 + */ 3.15 +int cx_cmp_ptr( 3.16 + void const *ptr1, 3.17 + void const *ptr2 3.18 +); 3.19 + 3.20 #ifdef __cplusplus 3.21 } // extern "C" 3.22 #endif
4.1 --- a/tests/test_compare.cpp Mon Dec 18 15:13:26 2023 +0100 4.2 +++ b/tests/test_compare.cpp Mon Dec 18 16:04:21 2023 +0100 4.3 @@ -125,3 +125,13 @@ 4.4 TEST(Compare, UintPtr) { 4.5 test_compare<uintptr_t>(cx_cmp_uintptr); 4.6 } 4.7 + 4.8 +TEST(Compare, Ptr) { 4.9 + int data[3]; 4.10 + EXPECT_EQ(0, cx_cmp_ptr(data, data)); 4.11 + EXPECT_EQ(-1, cx_cmp_ptr(&data[0], &data[1])); 4.12 + EXPECT_EQ(-1, cx_cmp_ptr(&data[1], &data[2])); 4.13 + EXPECT_EQ(1, cx_cmp_ptr(&data[2], &data[1])); 4.14 + EXPECT_EQ(1, cx_cmp_ptr(&data[1], data)); 4.15 + EXPECT_EQ(0, cx_cmp_ptr(&data[1], &data[1])); 4.16 +}