cppu/source/uno/eq.hxx | 100 ++++++++++++++++++++++++------------------------ include/o3tl/intcmp.hxx | 84 ++-------------------------------------- sal/rtl/ustring.cxx | 6 +- 3 files changed, 59 insertions(+), 131 deletions(-)
New commits: commit 8e0ffffe60f1e9c97d7937ffe7d206fb62900357 Author: Stephan Bergmann <sberg...@redhat.com> AuthorDate: Thu Oct 26 22:40:24 2023 +0200 Commit: Stephan Bergmann <stephan.bergm...@allotropia.de> CommitDate: Thu Apr 24 10:07:03 2025 +0200 Directly use std::cmp_*, drop o3tl::cmp_* Change-Id: Ic6e6f1f10cd016550df38118c4e7fdba4d3c4b6d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158513 Reviewed-by: Stephan Bergmann <stephan.bergm...@allotropia.de> Tested-by: Jenkins diff --git a/cppu/source/uno/eq.hxx b/cppu/source/uno/eq.hxx index 60a372886776..b3fb5c4c5a5d 100644 --- a/cppu/source/uno/eq.hxx +++ b/cppu/source/uno/eq.hxx @@ -20,8 +20,8 @@ #include <cmath> #include <string.h> +#include <utility> -#include <o3tl/intcmp.hxx> #include <osl/diagnose.h> #include <rtl/ustring.hxx> @@ -295,25 +295,25 @@ inline bool _equalData( switch (eSourceTypeClass) { case typelib_TypeClass_BYTE: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int8 *>(pDest), *static_cast<sal_Int8 *>(pSource)); case typelib_TypeClass_SHORT: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int8 *>(pDest), *static_cast<sal_Int16 *>(pSource)); case typelib_TypeClass_UNSIGNED_SHORT: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int8 *>(pDest), *static_cast<sal_uInt16 *>(pSource)); case typelib_TypeClass_LONG: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int8 *>(pDest), *static_cast<sal_Int32 *>(pSource)); case typelib_TypeClass_UNSIGNED_LONG: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int8 *>(pDest), *static_cast<sal_uInt32 *>(pSource)); case typelib_TypeClass_HYPER: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int8 *>(pDest), *static_cast<sal_Int64 *>(pSource)); case typelib_TypeClass_UNSIGNED_HYPER: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int8 *>(pDest), *static_cast<sal_Int64 *>(pSource)); case typelib_TypeClass_FLOAT: return (static_cast<float>(*static_cast<sal_Int8 *>(pDest)) == *static_cast<float *>(pSource)); @@ -326,25 +326,25 @@ inline bool _equalData( switch (eSourceTypeClass) { case typelib_TypeClass_BYTE: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int16 *>(pDest), *static_cast<sal_Int8 *>(pSource)); case typelib_TypeClass_SHORT: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int16 *>(pDest), *static_cast<sal_Int16 *>(pSource)); case typelib_TypeClass_UNSIGNED_SHORT: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int16 *>(pDest), *static_cast<sal_uInt16 *>(pSource)); case typelib_TypeClass_LONG: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int16 *>(pDest), *static_cast<sal_Int32 *>(pSource)); case typelib_TypeClass_UNSIGNED_LONG: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int16 *>(pDest), *static_cast<sal_uInt32 *>(pSource)); case typelib_TypeClass_HYPER: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int16 *>(pDest), *static_cast<sal_Int64 *>(pSource)); case typelib_TypeClass_UNSIGNED_HYPER: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int16 *>(pDest), *static_cast<sal_Int64 *>(pSource)); case typelib_TypeClass_FLOAT: return (static_cast<float>(*static_cast<sal_Int16 *>(pDest)) == *static_cast<float *>(pSource)); @@ -357,25 +357,25 @@ inline bool _equalData( switch (eSourceTypeClass) { case typelib_TypeClass_BYTE: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_uInt16 *>(pDest), *static_cast<sal_Int8 *>(pSource)); case typelib_TypeClass_SHORT: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_uInt16 *>(pDest), *static_cast<sal_Int16 *>(pSource)); case typelib_TypeClass_UNSIGNED_SHORT: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_uInt16 *>(pDest), *static_cast<sal_uInt16 *>(pSource)); case typelib_TypeClass_LONG: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_uInt16 *>(pDest), *static_cast<sal_Int32 *>(pSource)); case typelib_TypeClass_UNSIGNED_LONG: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_uInt16 *>(pDest), *static_cast<sal_uInt32 *>(pSource)); case typelib_TypeClass_HYPER: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_uInt16 *>(pDest), *static_cast<sal_Int64 *>(pSource)); case typelib_TypeClass_UNSIGNED_HYPER: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_uInt16 *>(pDest), *static_cast<sal_uInt64 *>(pSource)); case typelib_TypeClass_FLOAT: return (static_cast<float>(*static_cast<sal_uInt16 *>(pDest)) == *static_cast<float *>(pSource)); @@ -388,25 +388,25 @@ inline bool _equalData( switch (eSourceTypeClass) { case typelib_TypeClass_BYTE: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int32 *>(pDest), *static_cast<sal_Int8 *>(pSource)); case typelib_TypeClass_SHORT: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int32 *>(pDest), *static_cast<sal_Int16 *>(pSource)); case typelib_TypeClass_UNSIGNED_SHORT: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int32 *>(pDest), *static_cast<sal_uInt16 *>(pSource)); case typelib_TypeClass_LONG: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int32 *>(pDest), *static_cast<sal_Int32 *>(pSource)); case typelib_TypeClass_UNSIGNED_LONG: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int32 *>(pDest), *static_cast<sal_uInt32 *>(pSource)); case typelib_TypeClass_HYPER: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int32 *>(pDest), *static_cast<sal_Int64 *>(pSource)); case typelib_TypeClass_UNSIGNED_HYPER: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int32 *>(pDest), *static_cast<sal_Int64 *>(pSource)); case typelib_TypeClass_FLOAT: return (static_cast<float>(*static_cast<sal_Int32 *>(pDest)) == *static_cast<float *>(pSource)); @@ -419,25 +419,25 @@ inline bool _equalData( switch (eSourceTypeClass) { case typelib_TypeClass_BYTE: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_uInt32 *>(pDest), *static_cast<sal_Int8 *>(pSource)); case typelib_TypeClass_SHORT: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_uInt32 *>(pDest), *static_cast<sal_Int16 *>(pSource)); case typelib_TypeClass_UNSIGNED_SHORT: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_uInt32 *>(pDest), *static_cast<sal_uInt16 *>(pSource)); case typelib_TypeClass_LONG: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_uInt32 *>(pDest), *static_cast<sal_Int32 *>(pSource)); case typelib_TypeClass_UNSIGNED_LONG: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_uInt32 *>(pDest), *static_cast<sal_uInt32 *>(pSource)); case typelib_TypeClass_HYPER: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_uInt32 *>(pDest), *static_cast<sal_Int64 *>(pSource)); case typelib_TypeClass_UNSIGNED_HYPER: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_uInt32 *>(pDest), *static_cast<sal_uInt64 *>(pSource)); case typelib_TypeClass_FLOAT: return (static_cast<float>(*static_cast<sal_uInt32 *>(pDest)) == *static_cast<float *>(pSource)); @@ -450,25 +450,25 @@ inline bool _equalData( switch (eSourceTypeClass) { case typelib_TypeClass_BYTE: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int64 *>(pDest), *static_cast<sal_Int8 *>(pSource)); case typelib_TypeClass_SHORT: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int64 *>(pDest), *static_cast<sal_Int16 *>(pSource)); case typelib_TypeClass_UNSIGNED_SHORT: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int64 *>(pDest), *static_cast<sal_uInt16 *>(pSource)); case typelib_TypeClass_LONG: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int64 *>(pDest), *static_cast<sal_Int32 *>(pSource)); case typelib_TypeClass_UNSIGNED_LONG: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int64 *>(pDest), *static_cast<sal_uInt32 *>(pSource)); case typelib_TypeClass_HYPER: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int64 *>(pDest), *static_cast<sal_Int64 *>(pSource)); case typelib_TypeClass_UNSIGNED_HYPER: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_Int64 *>(pDest), *static_cast<sal_Int64 *>(pSource)); case typelib_TypeClass_FLOAT: return (static_cast<float>(*static_cast<sal_Int64 *>(pDest)) == *static_cast<float *>(pSource)); @@ -481,25 +481,25 @@ inline bool _equalData( switch (eSourceTypeClass) { case typelib_TypeClass_BYTE: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_uInt64 *>(pDest), *static_cast<sal_Int8 *>(pSource)); case typelib_TypeClass_SHORT: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_uInt64 *>(pDest), *static_cast<sal_Int16 *>(pSource)); case typelib_TypeClass_UNSIGNED_SHORT: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_uInt64 *>(pDest), *static_cast<sal_uInt16 *>(pSource)); case typelib_TypeClass_LONG: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_uInt64 *>(pDest), *static_cast<sal_Int32 *>(pSource)); case typelib_TypeClass_UNSIGNED_LONG: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_uInt64 *>(pDest), *static_cast<sal_uInt32 *>(pSource)); case typelib_TypeClass_HYPER: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_uInt64 *>(pDest), *static_cast<sal_Int64 *>(pSource)); case typelib_TypeClass_UNSIGNED_HYPER: - return o3tl::cmp_equal( + return std::cmp_equal( *static_cast<sal_uInt64 *>(pDest), *static_cast<sal_uInt64 *>(pSource)); case typelib_TypeClass_FLOAT: if (::floor( *static_cast<float *>(pSource) ) != *static_cast<float *>(pSource) || *static_cast<float *>(pSource) < 0) diff --git a/include/o3tl/intcmp.hxx b/include/o3tl/intcmp.hxx index dbc10d9052b0..dcfefae8531f 100644 --- a/include/o3tl/intcmp.hxx +++ b/include/o3tl/intcmp.hxx @@ -11,82 +11,10 @@ #include <sal/config.h> -#include <type_traits> #include <utility> -#include <o3tl/safeint.hxx> - namespace o3tl { -// An approximation of the C++20 integer comparison functions -// (<https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p0586r2.html> "Safe integral -// comparisons"), still missing from LLVM 12 libc++: -#if defined __cpp_lib_integer_comparison_functions - -using std::cmp_equal; -using std::cmp_not_equal; -using std::cmp_less; -using std::cmp_greater; -using std::cmp_less_equal; -using std::cmp_greater_equal; - -#else - -template <typename T1, typename T2> constexpr bool cmp_equal(T1 value1, T2 value2) noexcept -{ - // coverity[same_on_both_sides: FALSE] - if constexpr (std::is_signed_v<T1> == std::is_signed_v<T2>) - { - return value1 == value2; - } - else if constexpr (std::is_signed_v<T1>) - { - return value1 >= 0 && o3tl::make_unsigned(value1) == value2; - } - else - { - return value2 >= 0 && value1 == o3tl::make_unsigned(value2); - } -} - -template <typename T1, typename T2> constexpr bool cmp_not_equal(T1 value1, T2 value2) noexcept -{ - return !cmp_equal(value1, value2); -} - -template <typename T1, typename T2> constexpr bool cmp_less(T1 value1, T2 value2) noexcept -{ - if constexpr (std::is_signed_v<T1> == std::is_signed_v<T2>) - { - return value1 < value2; - } - else if constexpr (std::is_signed_v<T1>) - { - return value1 < 0 || o3tl::make_unsigned(value1) < value2; - } - else - { - return value2 >= 0 && value1 < o3tl::make_unsigned(value2); - } -} - -template <typename T1, typename T2> constexpr bool cmp_greater(T1 value1, T2 value2) noexcept -{ - return cmp_less(value2, value1); -} - -template <typename T1, typename T2> constexpr bool cmp_less_equal(T1 value1, T2 value2) noexcept -{ - return !cmp_greater(value1, value2); -} - -template <typename T1, typename T2> constexpr bool cmp_greater_equal(T1 value1, T2 value2) noexcept -{ - return !cmp_less(value1, value2); -} - -#endif - // A convenient operator syntax around the standard integer comparison functions: template <typename T> struct IntCmp { @@ -100,32 +28,32 @@ template <typename T> struct IntCmp template <typename T1, typename T2> constexpr bool operator==(IntCmp<T1> value1, IntCmp<T2> value2) { - return o3tl::cmp_equal(value1.value, value2.value); + return std::cmp_equal(value1.value, value2.value); } template <typename T1, typename T2> constexpr bool operator!=(IntCmp<T1> value1, IntCmp<T2> value2) { - return o3tl::cmp_not_equal(value1.value, value2.value); + return std::cmp_not_equal(value1.value, value2.value); } template <typename T1, typename T2> constexpr bool operator<(IntCmp<T1> value1, IntCmp<T2> value2) { - return o3tl::cmp_less(value1.value, value2.value); + return std::cmp_less(value1.value, value2.value); } template <typename T1, typename T2> constexpr bool operator>(IntCmp<T1> value1, IntCmp<T2> value2) { - return o3tl::cmp_greater(value1.value, value2.value); + return std::cmp_greater(value1.value, value2.value); } template <typename T1, typename T2> constexpr bool operator<=(IntCmp<T1> value1, IntCmp<T2> value2) { - return o3tl::cmp_less_equal(value1.value, value2.value); + return std::cmp_less_equal(value1.value, value2.value); } template <typename T1, typename T2> constexpr bool operator>=(IntCmp<T1> value1, IntCmp<T2> value2) { - return o3tl::cmp_greater_equal(value1.value, value2.value); + return std::cmp_greater_equal(value1.value, value2.value); } } diff --git a/sal/rtl/ustring.cxx b/sal/rtl/ustring.cxx index d24a0fed3465..dcc19d3b6ddd 100644 --- a/sal/rtl/ustring.cxx +++ b/sal/rtl/ustring.cxx @@ -22,9 +22,9 @@ #include <cassert> #include <cstdlib> #include <limits> +#include <utility> #include <config_options.h> -#include <o3tl/intcmp.hxx> #include <o3tl/string_view.hxx> #include <osl/diagnose.h> #include <osl/interlck.h> @@ -736,8 +736,8 @@ sal_uInt32 SAL_CALL rtl_uString_iterateCodePoints( assert(string != nullptr && indexUtf16 != nullptr); assert( *indexUtf16 >= 0 - && o3tl::cmp_less_equal(*indexUtf16, std::numeric_limits<std::size_t>::max())); - // using o3tl::cmp_less_equal nicely avoids potential + && std::cmp_less_equal(*indexUtf16, std::numeric_limits<std::size_t>::max())); + // using std::cmp_less_equal nicely avoids potential // -Wtautological-constant-out-of-range-compare auto const cp = o3tl::iterateCodePoints( std::u16string_view(string->buffer, string->length), indexUtf16, incrementCodePoints);