From d48fa996e6885b1c0cc81ab84022f4bdcadaa2c8 Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Tue, 9 Jun 2026 09:20:44 -0400 Subject: [PATCH] refactor(sonar): fix cpp:S2807 --- src/common/include/display_device/types.h | 38 +++++++++++++--- src/common/types.cpp | 44 ------------------- .../include/display_device/windows/types.h | 22 +++++++--- src/windows/types.cpp | 20 --------- tests/unit/general/test_json.cpp | 12 ++--- tests/unit/windows/utils/comparison.cpp | 32 ++++++-------- tests/unit/windows/utils/comparison.h | 4 -- 7 files changed, 65 insertions(+), 107 deletions(-) diff --git a/src/common/include/display_device/types.h b/src/common/include/display_device/types.h index 7c42bf82..335f7ef3 100644 --- a/src/common/include/display_device/types.h +++ b/src/common/include/display_device/types.h @@ -5,6 +5,8 @@ #pragma once // system includes +#include +#include #include #include #include @@ -70,7 +72,9 @@ namespace display_device { /** * @brief Comparator for strict equality. */ - friend bool operator==(const Resolution &lhs, const Resolution &rhs); + friend bool operator==(const Resolution &lhs, const Resolution &rhs) { + return lhs.m_height == rhs.m_height && lhs.m_width == rhs.m_width; + } }; /** @@ -83,7 +87,7 @@ namespace display_device { /** * @brief Comparator for strict equality. */ - friend bool operator==(const Point &lhs, const Point &rhs); + friend bool operator==(const Point &lhs, const Point &rhs) = default; }; /** @@ -96,7 +100,7 @@ namespace display_device { /** * @brief Comparator for strict equality. */ - friend bool operator==(const Rational &lhs, const Rational &rhs); + friend bool operator==(const Rational &lhs, const Rational &rhs) = default; }; /** @@ -104,6 +108,22 @@ namespace display_device { */ using FloatingPoint = std::variant; + namespace detail { + inline bool fuzzyCompare(const double lhs, const double rhs) { + return std::abs(lhs - rhs) * 1000000000000. <= std::min(std::abs(lhs), std::abs(rhs)); + } + + inline bool fuzzyCompare(const FloatingPoint &lhs, const FloatingPoint &rhs) { + if (lhs.index() == rhs.index()) { + if (std::holds_alternative(lhs)) { + return fuzzyCompare(std::get(lhs), std::get(rhs)); + } + return lhs == rhs; + } + return false; + } + } // namespace detail + /** * @brief Parsed EDID data. */ @@ -122,7 +142,7 @@ namespace display_device { /** * @brief Comparator for strict equality. */ - friend bool operator==(const EdidData &lhs, const EdidData &rhs); + friend bool operator==(const EdidData &lhs, const EdidData &rhs) = default; }; /** @@ -143,7 +163,11 @@ namespace display_device { /** * @brief Comparator for strict equality. */ - friend bool operator==(const Info &lhs, const Info &rhs); + friend bool operator==(const Info &lhs, const Info &rhs) { + return lhs.m_resolution == rhs.m_resolution && detail::fuzzyCompare(lhs.m_resolution_scale, rhs.m_resolution_scale) && + detail::fuzzyCompare(lhs.m_refresh_rate, rhs.m_refresh_rate) && lhs.m_primary == rhs.m_primary && + lhs.m_origin_point == rhs.m_origin_point && lhs.m_hdr_state == rhs.m_hdr_state; + } }; std::string m_device_id {}; /**< A unique device ID used by this API to identify the device. */ @@ -155,7 +179,7 @@ namespace display_device { /** * @brief Comparator for strict equality. */ - friend bool operator==(const EnumeratedDevice &lhs, const EnumeratedDevice &rhs); + friend bool operator==(const EnumeratedDevice &lhs, const EnumeratedDevice &rhs) = default; }; /** @@ -189,6 +213,6 @@ namespace display_device { /** * @brief Comparator for strict equality. */ - friend bool operator==(const SingleDisplayConfiguration &lhs, const SingleDisplayConfiguration &rhs); + friend bool operator==(const SingleDisplayConfiguration &lhs, const SingleDisplayConfiguration &rhs) = default; }; } // namespace display_device diff --git a/src/common/types.cpp b/src/common/types.cpp index d4378ffd..19a01a56 100644 --- a/src/common/types.cpp +++ b/src/common/types.cpp @@ -14,20 +14,6 @@ #include "display_device/logging.h" namespace { - bool fuzzyCompare(const double lhs, const double rhs) { - return std::abs(lhs - rhs) * 1000000000000. <= std::min(std::abs(lhs), std::abs(rhs)); - } - - bool fuzzyCompare(const display_device::FloatingPoint &lhs, const display_device::FloatingPoint &rhs) { - if (lhs.index() == rhs.index()) { - if (std::holds_alternative(lhs)) { - return fuzzyCompare(std::get(lhs), std::get(rhs)); - } - return lhs == rhs; - } - return false; - } - std::byte operator+(const std::byte lhs, const std::byte &rhs) { return std::byte {static_cast(static_cast(lhs) + static_cast(rhs))}; } @@ -49,18 +35,6 @@ namespace { } // namespace namespace display_device { - bool operator==(const Rational &lhs, const Rational &rhs) { - return lhs.m_numerator == rhs.m_numerator && lhs.m_denominator == rhs.m_denominator; - } - - bool operator==(const Point &lhs, const Point &rhs) { - return lhs.m_x == rhs.m_x && lhs.m_y == rhs.m_y; - } - - bool operator==(const Resolution &lhs, const Resolution &rhs) { - return lhs.m_height == rhs.m_height && lhs.m_width == rhs.m_width; - } - std::optional EdidData::parse(const std::vector &data) { if (data.empty()) { return std::nullopt; @@ -139,22 +113,4 @@ namespace display_device { return edid; } - - bool operator==(const EdidData &lhs, const EdidData &rhs) { - return lhs.m_manufacturer_id == rhs.m_manufacturer_id && lhs.m_product_code == rhs.m_product_code && lhs.m_serial_number == rhs.m_serial_number; - } - - bool operator==(const EnumeratedDevice::Info &lhs, const EnumeratedDevice::Info &rhs) { - return lhs.m_resolution == rhs.m_resolution && fuzzyCompare(lhs.m_resolution_scale, rhs.m_resolution_scale) && - fuzzyCompare(lhs.m_refresh_rate, rhs.m_refresh_rate) && lhs.m_primary == rhs.m_primary && - lhs.m_origin_point == rhs.m_origin_point && lhs.m_hdr_state == rhs.m_hdr_state; - } - - bool operator==(const EnumeratedDevice &lhs, const EnumeratedDevice &rhs) { - return lhs.m_device_id == rhs.m_device_id && lhs.m_display_name == rhs.m_display_name && lhs.m_friendly_name == rhs.m_friendly_name && lhs.m_edid == rhs.m_edid && lhs.m_info == rhs.m_info; - } - - bool operator==(const SingleDisplayConfiguration &lhs, const SingleDisplayConfiguration &rhs) { - return lhs.m_device_id == rhs.m_device_id && lhs.m_device_prep == rhs.m_device_prep && lhs.m_resolution == rhs.m_resolution && lhs.m_refresh_rate == rhs.m_refresh_rate && lhs.m_hdr_state == rhs.m_hdr_state; - } } // namespace display_device diff --git a/src/windows/include/display_device/windows/types.h b/src/windows/include/display_device/windows/types.h index 045762fe..b04ec5d3 100644 --- a/src/windows/include/display_device/windows/types.h +++ b/src/windows/include/display_device/windows/types.h @@ -61,6 +61,16 @@ namespace display_device { std::map m_source_id_to_path_index {}; /**< Maps source ids to its index in the path list. */ LUID m_adapter_id {}; /**< Adapter id shared by all source ids. */ std::optional m_active_source {}; /**< Currently active source id. */ + + /** + * @brief Comparator for strict equality. + */ + friend bool operator==(const PathSourceIndexData &lhs, const PathSourceIndexData &rhs) { + return lhs.m_source_id_to_path_index == rhs.m_source_id_to_path_index && + lhs.m_adapter_id.HighPart == rhs.m_adapter_id.HighPart && + lhs.m_adapter_id.LowPart == rhs.m_adapter_id.LowPart && + lhs.m_active_source == rhs.m_active_source; + } }; /** @@ -95,7 +105,9 @@ namespace display_device { /** * @brief Comparator for strict equality. */ - friend bool operator==(const DisplayMode &lhs, const DisplayMode &rhs); + friend bool operator==(const DisplayMode &lhs, const DisplayMode &rhs) { + return lhs.m_refresh_rate == rhs.m_refresh_rate && lhs.m_resolution == rhs.m_resolution; + } }; /** @@ -123,7 +135,7 @@ namespace display_device { /** * @brief Comparator for strict equality. */ - friend bool operator==(const Initial &lhs, const Initial &rhs); + friend bool operator==(const Initial &lhs, const Initial &rhs) = default; }; /** @@ -151,7 +163,7 @@ namespace display_device { /** * @brief Comparator for strict equality. */ - friend bool operator==(const Modified &lhs, const Modified &rhs); + friend bool operator==(const Modified &lhs, const Modified &rhs) = default; }; Initial m_initial; @@ -160,7 +172,7 @@ namespace display_device { /** * @brief Comparator for strict equality. */ - friend bool operator==(const SingleDisplayConfigState &lhs, const SingleDisplayConfigState &rhs); + friend bool operator==(const SingleDisplayConfigState &lhs, const SingleDisplayConfigState &rhs) = default; }; /** @@ -177,6 +189,6 @@ namespace display_device { /** * @brief Comparator for strict equality. */ - friend bool operator==(const WinWorkarounds &lhs, const WinWorkarounds &rhs); + friend bool operator==(const WinWorkarounds &lhs, const WinWorkarounds &rhs) = default; }; } // namespace display_device diff --git a/src/windows/types.cpp b/src/windows/types.cpp index 3f805200..178c9b10 100644 --- a/src/windows/types.cpp +++ b/src/windows/types.cpp @@ -6,27 +6,7 @@ #include "display_device/windows/types.h" namespace display_device { - bool operator==(const DisplayMode &lhs, const DisplayMode &rhs) { - return lhs.m_refresh_rate == rhs.m_refresh_rate && lhs.m_resolution == rhs.m_resolution; - } - bool SingleDisplayConfigState::Modified::hasModifications() const { return !m_original_modes.empty() || !m_original_hdr_states.empty() || !m_original_primary_device.empty(); } - - bool operator==(const SingleDisplayConfigState::Initial &lhs, const SingleDisplayConfigState::Initial &rhs) { - return lhs.m_topology == rhs.m_topology && lhs.m_primary_devices == rhs.m_primary_devices; - } - - bool operator==(const SingleDisplayConfigState::Modified &lhs, const SingleDisplayConfigState::Modified &rhs) { - return lhs.m_topology == rhs.m_topology && lhs.m_original_modes == rhs.m_original_modes && lhs.m_original_hdr_states == rhs.m_original_hdr_states && lhs.m_original_primary_device == rhs.m_original_primary_device; - } - - bool operator==(const SingleDisplayConfigState &lhs, const SingleDisplayConfigState &rhs) { - return lhs.m_initial == rhs.m_initial && lhs.m_modified == rhs.m_modified; - } - - bool operator==(const WinWorkarounds &lhs, const WinWorkarounds &rhs) { - return lhs.m_hdr_blank_delay == rhs.m_hdr_blank_delay; - } } // namespace display_device diff --git a/tests/unit/general/test_json.cpp b/tests/unit/general/test_json.cpp index 9162a629..43bb9237 100644 --- a/tests/unit/general/test_json.cpp +++ b/tests/unit/general/test_json.cpp @@ -19,22 +19,18 @@ namespace display_device { struct TestStruct { struct Nested { int m_c {}; + + friend bool operator==(const Nested &lhs, const Nested &rhs) = default; }; std::string m_a {}; Nested m_b {}; + + friend bool operator==(const TestStruct &lhs, const TestStruct &rhs) = default; }; using TestVariant = std::variant; - bool operator==(const TestStruct::Nested &lhs, const TestStruct::Nested &rhs) { - return lhs.m_c == rhs.m_c; - } - - bool operator==(const TestStruct &lhs, const TestStruct &rhs) { - return lhs.m_a == rhs.m_a && lhs.m_b == rhs.m_b; - } - DD_JSON_DEFINE_SERIALIZE_ENUM_GCOVR_EXCL_BR_LINE(TestEnum, {{TestEnum::Value1, "Value1"}, {TestEnum::Value2, "ValueMaybe2"}}) DD_JSON_DEFINE_SERIALIZE_STRUCT(TestStruct::Nested, c) DD_JSON_DEFINE_SERIALIZE_STRUCT(TestStruct, a, b) diff --git a/tests/unit/windows/utils/comparison.cpp b/tests/unit/windows/utils/comparison.cpp index 710c6b7f..b699e6c9 100644 --- a/tests/unit/windows/utils/comparison.cpp +++ b/tests/unit/windows/utils/comparison.cpp @@ -1,27 +1,27 @@ // local includes #include "comparison.h" -bool operator==(const LUID &lhs, const LUID &rhs) { +bool operator==(const LUID &lhs, const LUID &rhs) { // NOSONAR(cpp:S2807): Windows SDK types cannot declare hidden friend test helpers. return lhs.HighPart == rhs.HighPart && lhs.LowPart == rhs.LowPart; } -bool operator==(const POINTL &lhs, const POINTL &rhs) { +bool operator==(const POINTL &lhs, const POINTL &rhs) { // NOSONAR(cpp:S2807): Windows SDK types cannot declare hidden friend test helpers. return lhs.x == rhs.x && lhs.y == rhs.y; } -bool operator==(const RECTL &lhs, const RECTL &rhs) { +bool operator==(const RECTL &lhs, const RECTL &rhs) { // NOSONAR(cpp:S2807): Windows SDK types cannot declare hidden friend test helpers. return lhs.bottom == rhs.bottom && lhs.left == rhs.left && lhs.right == rhs.right && lhs.top == rhs.top; } -bool operator==(const DISPLAYCONFIG_RATIONAL &lhs, const DISPLAYCONFIG_RATIONAL &rhs) { +bool operator==(const DISPLAYCONFIG_RATIONAL &lhs, const DISPLAYCONFIG_RATIONAL &rhs) { // NOSONAR(cpp:S2807): Windows SDK types cannot declare hidden friend test helpers. return lhs.Denominator == rhs.Denominator && lhs.Numerator == rhs.Numerator; } -bool operator==(const DISPLAYCONFIG_2DREGION &lhs, const DISPLAYCONFIG_2DREGION &rhs) { +bool operator==(const DISPLAYCONFIG_2DREGION &lhs, const DISPLAYCONFIG_2DREGION &rhs) { // NOSONAR(cpp:S2807): Windows SDK types cannot declare hidden friend test helpers. return lhs.cx == rhs.cx && lhs.cy == rhs.cy; } -bool operator==(const DISPLAYCONFIG_PATH_SOURCE_INFO &lhs, const DISPLAYCONFIG_PATH_SOURCE_INFO &rhs) { +bool operator==(const DISPLAYCONFIG_PATH_SOURCE_INFO &lhs, const DISPLAYCONFIG_PATH_SOURCE_INFO &rhs) { // NOSONAR(cpp:S2807): Windows SDK types cannot declare hidden friend test helpers. // clang-format off return lhs.adapterId == rhs.adapterId && lhs.id == rhs.id && @@ -31,7 +31,7 @@ bool operator==(const DISPLAYCONFIG_PATH_SOURCE_INFO &lhs, const DISPLAYCONFIG_P // clang-format on } -bool operator==(const DISPLAYCONFIG_PATH_TARGET_INFO &lhs, const DISPLAYCONFIG_PATH_TARGET_INFO &rhs) { +bool operator==(const DISPLAYCONFIG_PATH_TARGET_INFO &lhs, const DISPLAYCONFIG_PATH_TARGET_INFO &rhs) { // NOSONAR(cpp:S2807): Windows SDK types cannot declare hidden friend test helpers. // clang-format off return lhs.adapterId == rhs.adapterId && lhs.id == rhs.id && @@ -47,15 +47,15 @@ bool operator==(const DISPLAYCONFIG_PATH_TARGET_INFO &lhs, const DISPLAYCONFIG_P // clang-format on } -bool operator==(const DISPLAYCONFIG_PATH_INFO &lhs, const DISPLAYCONFIG_PATH_INFO &rhs) { +bool operator==(const DISPLAYCONFIG_PATH_INFO &lhs, const DISPLAYCONFIG_PATH_INFO &rhs) { // NOSONAR(cpp:S2807): Windows SDK types cannot declare hidden friend test helpers. return lhs.sourceInfo == rhs.sourceInfo && lhs.targetInfo == rhs.targetInfo && lhs.flags == rhs.flags; } -bool operator==(const DISPLAYCONFIG_SOURCE_MODE &lhs, const DISPLAYCONFIG_SOURCE_MODE &rhs) { +bool operator==(const DISPLAYCONFIG_SOURCE_MODE &lhs, const DISPLAYCONFIG_SOURCE_MODE &rhs) { // NOSONAR(cpp:S2807): Windows SDK types cannot declare hidden friend test helpers. return lhs.width == rhs.width && lhs.height == rhs.height && lhs.pixelFormat == rhs.pixelFormat && lhs.position == rhs.position; } -bool operator==(const DISPLAYCONFIG_VIDEO_SIGNAL_INFO &lhs, const DISPLAYCONFIG_VIDEO_SIGNAL_INFO &rhs) { +bool operator==(const DISPLAYCONFIG_VIDEO_SIGNAL_INFO &lhs, const DISPLAYCONFIG_VIDEO_SIGNAL_INFO &rhs) { // NOSONAR(cpp:S2807): Windows SDK types cannot declare hidden friend test helpers. // clang-format on return lhs.pixelRate == rhs.pixelRate && lhs.hSyncFreq == rhs.hSyncFreq && @@ -67,15 +67,15 @@ bool operator==(const DISPLAYCONFIG_VIDEO_SIGNAL_INFO &lhs, const DISPLAYCONFIG_ // clang-format oon } -bool operator==(const DISPLAYCONFIG_TARGET_MODE &lhs, const DISPLAYCONFIG_TARGET_MODE &rhs) { +bool operator==(const DISPLAYCONFIG_TARGET_MODE &lhs, const DISPLAYCONFIG_TARGET_MODE &rhs) { // NOSONAR(cpp:S2807): Windows SDK types cannot declare hidden friend test helpers. return lhs.targetVideoSignalInfo == rhs.targetVideoSignalInfo; } -bool operator==(const DISPLAYCONFIG_DESKTOP_IMAGE_INFO &lhs, const DISPLAYCONFIG_DESKTOP_IMAGE_INFO &rhs) { +bool operator==(const DISPLAYCONFIG_DESKTOP_IMAGE_INFO &lhs, const DISPLAYCONFIG_DESKTOP_IMAGE_INFO &rhs) { // NOSONAR(cpp:S2807): Windows SDK types cannot declare hidden friend test helpers. return lhs.PathSourceSize == rhs.PathSourceSize && lhs.DesktopImageRegion == rhs.DesktopImageRegion && lhs.DesktopImageClip == rhs.DesktopImageClip; } -bool operator==(const DISPLAYCONFIG_MODE_INFO &lhs, const DISPLAYCONFIG_MODE_INFO &rhs) { +bool operator==(const DISPLAYCONFIG_MODE_INFO &lhs, const DISPLAYCONFIG_MODE_INFO &rhs) { // NOSONAR(cpp:S2807): Windows SDK types cannot declare hidden friend test helpers. if (lhs.infoType == rhs.infoType && lhs.id == rhs.id && lhs.adapterId == rhs.adapterId) { if (lhs.infoType == DISPLAYCONFIG_MODE_INFO_TYPE_SOURCE) { return lhs.sourceMode == rhs.sourceMode; @@ -90,9 +90,3 @@ bool operator==(const DISPLAYCONFIG_MODE_INFO &lhs, const DISPLAYCONFIG_MODE_INF } return false; } - -namespace display_device { - bool operator==(const PathSourceIndexData &lhs, const PathSourceIndexData &rhs) { - return lhs.m_source_id_to_path_index == rhs.m_source_id_to_path_index && lhs.m_adapter_id == rhs.m_adapter_id && lhs.m_active_source == rhs.m_active_source; - } -} // namespace display_device diff --git a/tests/unit/windows/utils/comparison.h b/tests/unit/windows/utils/comparison.h index f7f98996..9930cc38 100644 --- a/tests/unit/windows/utils/comparison.h +++ b/tests/unit/windows/utils/comparison.h @@ -29,7 +29,3 @@ bool operator==(const DISPLAYCONFIG_TARGET_MODE &lhs, const DISPLAYCONFIG_TARGET bool operator==(const DISPLAYCONFIG_DESKTOP_IMAGE_INFO &lhs, const DISPLAYCONFIG_DESKTOP_IMAGE_INFO &rhs); bool operator==(const DISPLAYCONFIG_MODE_INFO &lhs, const DISPLAYCONFIG_MODE_INFO &rhs); - -namespace display_device { - bool operator==(const PathSourceIndexData &lhs, const PathSourceIndexData &rhs); -} // namespace display_device