add cx_cmp_ptr() - fix #340

Mon, 18 Dec 2023 16:04:21 +0100

author
Mike Becker <universe@uap-core.de>
date
Mon, 18 Dec 2023 16:04:21 +0100
changeset 762
4523f6d42512
parent 761
61d5197d612b
child 763
741a2040fa33

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 +}

mercurial