From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Tyler Veness 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>& constraints) { std::array 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 + +namespace slp { + +template +constexpr std::underlying_type_t to_underlying(Enum e) noexcept { + return static_cast>(e); +} + +} // namespace slp