# HG changeset patch # User Mike Becker # Date 1702911861 -3600 # Node ID 4523f6d425129c8f1ca0c8ca055520a5e7320922 # Parent 61d5197d612b3eef9921275ea3b5b86515c0a31e add cx_cmp_ptr() - fix #340 diff -r 61d5197d612b -r 4523f6d42512 CHANGELOG --- a/CHANGELOG Mon Dec 18 15:13:26 2023 +0100 +++ b/CHANGELOG Mon Dec 18 16:04:21 2023 +0100 @@ -1,6 +1,7 @@ Version 3.1 - tbd. ------------------------ * adds cxBufferReset() + * adds cx_cmp_ptr() * fixes wrong link from UCX 2 documentation to UCX 3 documentation * removes CMake, except for tests at the moment, in favor of uwproj diff -r 61d5197d612b -r 4523f6d42512 src/compare.c --- a/src/compare.c Mon Dec 18 15:13:26 2023 +0100 +++ b/src/compare.c Mon Dec 18 16:04:21 2023 +0100 @@ -199,3 +199,15 @@ } } +int cx_cmp_ptr( + void const *ptr1, + void const *ptr2 +) { + uintptr_t p1 = (uintptr_t) ptr1; + uintptr_t p2 = (uintptr_t) ptr2; + if (p1 == p2) { + return 0; + } else { + return p1 < p2 ? -1 : 1; + } +} diff -r 61d5197d612b -r 4523f6d42512 src/cx/compare.h --- a/src/cx/compare.h Mon Dec 18 15:13:26 2023 +0100 +++ b/src/cx/compare.h Mon Dec 18 16:04:21 2023 +0100 @@ -212,6 +212,19 @@ void const *ptr2 ); +/** + * Compares the pointers specified in the arguments without de-referencing. + * + * @param ptr1 pointer one + * @param ptr2 pointer two + * @return -1 if ptr1 is less than ptr2, 0 if both are equal, + * 1 if ptr1 is greater than ptr2 + */ +int cx_cmp_ptr( + void const *ptr1, + void const *ptr2 +); + #ifdef __cplusplus } // extern "C" #endif diff -r 61d5197d612b -r 4523f6d42512 tests/test_compare.cpp --- a/tests/test_compare.cpp Mon Dec 18 15:13:26 2023 +0100 +++ b/tests/test_compare.cpp Mon Dec 18 16:04:21 2023 +0100 @@ -125,3 +125,13 @@ TEST(Compare, UintPtr) { test_compare(cx_cmp_uintptr); } + +TEST(Compare, Ptr) { + int data[3]; + EXPECT_EQ(0, cx_cmp_ptr(data, data)); + EXPECT_EQ(-1, cx_cmp_ptr(&data[0], &data[1])); + EXPECT_EQ(-1, cx_cmp_ptr(&data[1], &data[2])); + EXPECT_EQ(1, cx_cmp_ptr(&data[2], &data[1])); + EXPECT_EQ(1, cx_cmp_ptr(&data[1], data)); + EXPECT_EQ(0, cx_cmp_ptr(&data[1], &data[1])); +}