20namespace display_device::detail {
37 template<
typename Topology>
39 Topology stripped_topology;
40 for (
const auto &group : topology) {
41 std::vector<std::string> stripped_group;
42 for (
const auto &device_id : group) {
43 if (available_device_ids.contains(device_id)) {
44 stripped_group.push_back(device_id);
48 if (!stripped_group.empty()) {
49 stripped_topology.push_back(stripped_group);
53 return stripped_topology;
67 template<
typename Initial,
typename FormatTopologyFn>
69 const Initial &initial_state,
73 const FormatTopologyFn &format_topology
78 std::ranges::set_intersection(
79 initial_state.m_primary_devices,
81 std::inserter(initial_primary_devices, std::begin(initial_primary_devices))
84 if (stripped_initial_topology.empty()) {
89 if (initial_primary_devices.empty()) {
90 initial_primary_devices = primary_device_ids;
91 if (initial_primary_devices.empty()) {
97 if (initial_state.m_topology != stripped_initial_topology || initial_state.m_primary_devices != initial_primary_devices) {
99 <<
" - topology: " << format_topology(initial_state.m_topology) <<
" -> " << format_topology(stripped_initial_topology) <<
"\n"
104 stripped_initial_topology,
105 initial_primary_devices
Declarations for JSON conversion functions.
const std::optional< unsigned int > JSON_COMPACT
Indentation value for compact JSON output.
Definition json.cpp:16
std::string toJson(const EdidData &obj, const std::optional< unsigned int > &indent=2u, bool *success=nullptr)
Serialize EDID data to JSON.
Definition json.cpp:18
Declarations for common display device types.
std::set< std::string, std::less<> > StringSet
Ordered set keyed by strings with transparent comparisons.
Definition types.h:46
Declarations for the logging utility.
#define DD_LOG(level)
Helper MACRO that disables output string computation if log level is not enabled.
Definition logging.h:153
std::optional< Initial > stripInitialState(const Initial &initial_state, const StringSet &available_device_ids, const StringSet &primary_device_ids, const InitialStateStripMessages &messages, const FormatTopologyFn &format_topology)
Strip unavailable devices from an initial settings state.
Definition settings_state_utils.h:68
Topology stripUnavailableTopology(const Topology &topology, const StringSet &available_device_ids)
Strip unavailable device ids from a topology.
Definition settings_state_utils.h:38
Log messages used while stripping unavailable devices from initial state.
Definition settings_state_utils.h:24
std::string_view m_adapted_state
Warning prefix logged when the initial state is adapted.
Definition settings_state_utils.h:27
std::string_view m_missing_primary
Error logged when no usable primary devices remain.
Definition settings_state_utils.h:26
std::string_view m_missing_topology
Error logged when no initial topology devices remain.
Definition settings_state_utils.h:25