Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 31 additions & 7 deletions src/common/include/display_device/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
#pragma once

// system includes
#include <algorithm>
#include <cmath>
#include <cstddef>
#include <cstdint>
#include <functional>
Expand Down Expand Up @@ -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;
}
};

/**
Expand All @@ -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;
};

/**
Expand All @@ -96,14 +100,30 @@ 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;
};

/**
* @brief Floating point type.
*/
using FloatingPoint = std::variant<double, Rational>;

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<double>(lhs)) {
return fuzzyCompare(std::get<double>(lhs), std::get<double>(rhs));
}
return lhs == rhs;
}
return false;
}
} // namespace detail

/**
* @brief Parsed EDID data.
*/
Expand All @@ -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;
};

/**
Expand All @@ -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. */
Expand All @@ -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;
};

/**
Expand Down Expand Up @@ -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
44 changes: 0 additions & 44 deletions src/common/types.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<double>(lhs)) {
return fuzzyCompare(std::get<double>(lhs), std::get<double>(rhs));
}
return lhs == rhs;
}
return false;
}

std::byte operator+(const std::byte lhs, const std::byte &rhs) {
return std::byte {static_cast<std::uint8_t>(static_cast<int>(lhs) + static_cast<int>(rhs))};
}
Expand All @@ -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> EdidData::parse(const std::vector<std::byte> &data) {
if (data.empty()) {
return std::nullopt;
Expand Down Expand Up @@ -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
22 changes: 17 additions & 5 deletions src/windows/include/display_device/windows/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,16 @@ namespace display_device {
std::map<UINT32, std::size_t> 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<UINT32> 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;
}
};

/**
Expand Down Expand Up @@ -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;
}
};

/**
Expand Down Expand Up @@ -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;
};

/**
Expand Down Expand Up @@ -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;
Expand All @@ -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;
};

/**
Expand All @@ -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
20 changes: 0 additions & 20 deletions src/windows/types.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
12 changes: 4 additions & 8 deletions tests/unit/general/test_json.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<double, Rational>;

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)
Expand Down
32 changes: 13 additions & 19 deletions tests/unit/windows/utils/comparison.cpp
Original file line number Diff line number Diff line change
@@ -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 &&
Expand All @@ -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 &&
Expand All @@ -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 &&
Expand All @@ -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;
Expand All @@ -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
4 changes: 0 additions & 4 deletions tests/unit/windows/utils/comparison.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Loading