Files
allwpilib/upstream_utils/sleipnir_patches/0004-Replace-std-to_underlying.patch
2026-05-27 21:26:42 -07:00

90 lines
3.8 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Tyler Veness <calcmogul@gmail.com>
Date: Tue, 28 Jan 2025 22:19:31 -0800
Subject: [PATCH 04/10] Replace std::to_underlying()
---
include/sleipnir/optimization/problem.hpp | 9 +++++----
include/sleipnir/util/print_diagnostics.hpp | 3 ++-
include/sleipnir/util/to_underlying.hpp | 14 ++++++++++++++
3 files changed, 21 insertions(+), 5 deletions(-)
create mode 100644 include/sleipnir/util/to_underlying.hpp
diff --git a/include/sleipnir/optimization/problem.hpp b/include/sleipnir/optimization/problem.hpp
index 41b44578b1e2783dbceb300b7c72ee0c8d1202df..49921b98de3452b6ca9f2e33a86daa254c0d3a01 100644
--- a/include/sleipnir/optimization/problem.hpp
+++ b/include/sleipnir/optimization/problem.hpp
@@ -38,6 +38,7 @@
#include "sleipnir/util/profiler.hpp"
#include "sleipnir/util/spy.hpp"
#include "sleipnir/util/symbol_exports.hpp"
+#include "sleipnir/util/to_underlying.hpp"
namespace slp {
@@ -773,11 +774,11 @@ class Problem {
// Print problem structure
slp::println("\nProblem structure:");
slp::println(" ↳ {} cost function",
- types[std::to_underlying(cost_function_type())]);
+ types[slp::to_underlying(cost_function_type())]);
slp::println(" ↳ {} equality constraints",
- types[std::to_underlying(equality_constraint_type())]);
+ types[slp::to_underlying(equality_constraint_type())]);
slp::println(" ↳ {} inequality constraints",
- types[std::to_underlying(inequality_constraint_type())]);
+ types[slp::to_underlying(inequality_constraint_type())]);
if (m_decision_variables.size() == 1) {
slp::print("\n1 decision variable\n");
@@ -789,7 +790,7 @@ class Problem {
[](const gch::small_vector<Variable<Scalar>>& constraints) {
std::array<size_t, 5> counts{};
for (const auto& constraint : constraints) {
- ++counts[std::to_underlying(constraint.type())];
+ ++counts[slp::to_underlying(constraint.type())];
}
for (const auto& [count, name] :
std::views::zip(counts, std::array{"empty", "constant", "linear",
diff --git a/include/sleipnir/util/print_diagnostics.hpp b/include/sleipnir/util/print_diagnostics.hpp
index 87ccad9ef4b05ee5aeaaf0e5ff9cfbc7e995d5ed..831ae3e5d1002005a8aa00fc80accd705d5cca7d 100644
--- a/include/sleipnir/util/print_diagnostics.hpp
+++ b/include/sleipnir/util/print_diagnostics.hpp
@@ -17,6 +17,7 @@
#include "sleipnir/util/print.hpp"
#include "sleipnir/util/profiler.hpp"
+#include "sleipnir/util/to_underlying.hpp"
namespace slp {
@@ -230,7 +231,7 @@ void print_iteration_diagnostics(int iterations, IterationType type,
slp::println(
"│{:4} {:1} {:9.3f} {:10.4e} {:11.4e} {:10.4e} {:8.2e} {:8.2e} {:<5} "
"{:<5} {:8.2e} {:8.2e} {:8.2e} {:8.2e} {:2d}│",
- iterations, ITERATION_TYPES[std::to_underlying(type)], to_ms(time), error,
+ iterations, ITERATION_TYPES[slp::to_underlying(type)], to_ms(time), error,
cost, infeasibility, complementarity, μ, power_of_10(δ), power_of_10(γ),
full_primal_step_inf_norm, full_dual_step_inf_norm, primal_α, dual_α,
backtracks);
diff --git a/include/sleipnir/util/to_underlying.hpp b/include/sleipnir/util/to_underlying.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..3f9b4835b912c5a0d998c43828f255c61d0f573e
--- /dev/null
+++ b/include/sleipnir/util/to_underlying.hpp
@@ -0,0 +1,14 @@
+// Copyright (c) Sleipnir contributors
+
+#pragma once
+
+#include <type_traits>
+
+namespace slp {
+
+template <typename Enum>
+constexpr std::underlying_type_t<Enum> to_underlying(Enum e) noexcept {
+ return static_cast<std::underlying_type_t<Enum>>(e);
+}
+
+} // namespace slp