From 0b76095e855f0cee17632948d9382f7888ab6ab6 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Thu, 6 Nov 2025 12:16:39 -0800 Subject: [PATCH 1/2] Math.hxx: remove This no longer serves any useful purpose. In addition, std::lround is used in several places directly. Signed-off-by: Rosen Penev --- src/Stats.cxx | 3 +-- src/command/PlayerCommands.cxx | 3 +-- src/decoder/plugins/FaadDecoderPlugin.cxx | 4 ++-- src/decoder/plugins/WavpackDecoderPlugin.cxx | 3 +-- src/mixer/plugins/AlsaMixerPlugin.cxx | 4 ++-- src/mixer/plugins/WinmmMixerPlugin.cxx | 6 +++--- src/pcm/Mix.cxx | 3 +-- src/player/CrossFade.cxx | 6 +++--- src/util/Math.hxx | 20 -------------------- 9 files changed, 14 insertions(+), 38 deletions(-) delete mode 100644 src/util/Math.hxx diff --git a/src/Stats.cxx b/src/Stats.cxx index ef816d208c..e7c2c4cdb5 100644 --- a/src/Stats.cxx +++ b/src/Stats.cxx @@ -12,7 +12,6 @@ #include "db/Stats.hxx" #include "Log.hxx" #include "time/ChronoUtil.hxx" -#include "util/Math.hxx" #ifdef _WIN32 #include "system/Clock.hxx" @@ -112,7 +111,7 @@ stats_print(Response &r, const Partition &partition) r.Fmt("uptime: {}\n" "playtime: {}\n", std::chrono::duration_cast(uptime).count(), - lround(partition.pc.GetTotalPlayTime().count())); + std::lround(partition.pc.GetTotalPlayTime().count())); #ifdef ENABLE_DATABASE const Database *db = partition.instance.GetDatabase(); diff --git a/src/command/PlayerCommands.cxx b/src/command/PlayerCommands.cxx index 60a0de2603..0b8a31d96a 100644 --- a/src/command/PlayerCommands.cxx +++ b/src/command/PlayerCommands.cxx @@ -16,7 +16,6 @@ #include "util/StringBuffer.hxx" #include "util/ScopeExit.hxx" #include "util/Exception.hxx" -#include "util/Math.hxx" #include "db/Features.hxx" // for ENABLE_DATABASE #ifdef ENABLE_DATABASE @@ -152,7 +151,7 @@ handle_status(Client &client, [[maybe_unused]] Request args, Response &r) if (pc.GetCrossFade() > FloatDuration::zero()) r.Fmt(COMMAND_STATUS_CROSSFADE ": {}\n", - lround(pc.GetCrossFade().count())); + std::lround(pc.GetCrossFade().count())); if (pc.GetMixRampDelay() > FloatDuration::zero()) r.Fmt(COMMAND_STATUS_MIXRAMPDELAY ": {}\n", diff --git a/src/decoder/plugins/FaadDecoderPlugin.cxx b/src/decoder/plugins/FaadDecoderPlugin.cxx index c125d410c3..d0254383be 100644 --- a/src/decoder/plugins/FaadDecoderPlugin.cxx +++ b/src/decoder/plugins/FaadDecoderPlugin.cxx @@ -9,11 +9,11 @@ #include "tag/Handler.hxx" #include "util/ScopeExit.hxx" #include "util/Domain.hxx" -#include "util/Math.hxx" #include "util/SpanCast.hxx" #include "Log.hxx" #include +#include #include #include @@ -368,7 +368,7 @@ faad_stream_decode(DecoderClient &client, InputStream &is, /* update bit rate and position */ if (frame_info.samples > 0) { - bit_rate = lround(frame_info.bytesconsumed * 8.0 * + bit_rate = std::lround(frame_info.bytesconsumed * 8.0 * frame_info.channels * audio_format.sample_rate / frame_info.samples / 1000); } diff --git a/src/decoder/plugins/WavpackDecoderPlugin.cxx b/src/decoder/plugins/WavpackDecoderPlugin.cxx index ebb9e1d825..0f9d28ab9e 100644 --- a/src/decoder/plugins/WavpackDecoderPlugin.cxx +++ b/src/decoder/plugins/WavpackDecoderPlugin.cxx @@ -11,7 +11,6 @@ #include "fs/Path.hxx" #include "lib/fmt/PathFormatter.hxx" #include "lib/fmt/RuntimeError.hxx" -#include "util/Math.hxx" #include "util/ScopeExit.hxx" #include @@ -218,7 +217,7 @@ wavpack_decode(DecoderClient &client, WavpackContext *wpc, bool can_seek) if (n_frames == 0) break; - int bitrate = lround(WavpackGetInstantBitrate(wpc) / 1000); + int bitrate = std::lround(WavpackGetInstantBitrate(wpc) / 1000); format_samples(buffer, n_frames * audio_format.channels); cmd = client.SubmitAudio(nullptr, diff --git a/src/mixer/plugins/AlsaMixerPlugin.cxx b/src/mixer/plugins/AlsaMixerPlugin.cxx index cc849ac30c..9d411e9bda 100644 --- a/src/mixer/plugins/AlsaMixerPlugin.cxx +++ b/src/mixer/plugins/AlsaMixerPlugin.cxx @@ -15,10 +15,10 @@ #include "event/Call.hxx" #include "util/ASCII.hxx" #include "util/Domain.hxx" -#include "util/Math.hxx" #include "Log.hxx" #include +#include #define VOLUME_MIXER_ALSA_DEFAULT "default" #define VOLUME_MIXER_ALSA_CONTROL_DEFAULT "PCM" @@ -107,7 +107,7 @@ class AlsaMixer final : public Mixer { private: [[gnu::const]] static unsigned NormalizedToPercent(double normalized) noexcept { - return lround(100 * normalized); + return std::lround(100 * normalized); } [[gnu::pure]] diff --git a/src/mixer/plugins/WinmmMixerPlugin.cxx b/src/mixer/plugins/WinmmMixerPlugin.cxx index 08d507367d..2b63429400 100644 --- a/src/mixer/plugins/WinmmMixerPlugin.cxx +++ b/src/mixer/plugins/WinmmMixerPlugin.cxx @@ -6,11 +6,11 @@ #include "output/Features.h" #include "output/OutputAPI.hxx" #include "output/plugins/WinmmOutputPlugin.hxx" -#include "util/Math.hxx" #include #include +#include #include #include @@ -38,13 +38,13 @@ class WinmmMixer final : public Mixer { static inline int winmm_volume_decode(DWORD volume) { - return lround((volume & 0xFFFF) / 655.35); + return std::lround((volume & 0xFFFF) / 655.35); } static inline DWORD winmm_volume_encode(int volume) { - int value = lround(volume * 655.35); + int value = std::lround(volume * 655.35); return MAKELONG(value, value); } diff --git a/src/pcm/Mix.cxx b/src/pcm/Mix.cxx index 4af719a280..d4f790228e 100644 --- a/src/pcm/Mix.cxx +++ b/src/pcm/Mix.cxx @@ -6,7 +6,6 @@ #include "Clamp.hxx" #include "Traits.hxx" #include "util/Clamp.hxx" -#include "util/Math.hxx" #include "Dither.cxx" // including the .cxx file to get inlined templates @@ -208,7 +207,7 @@ pcm_mix(PcmDither &dither, void *buffer1, const void *buffer2, size_t size, s = std::sin((float)M_PI_2 * portion1); s *= s; - int vol1 = lround(s * PCM_VOLUME_1S); + int vol1 = std::lround(s * PCM_VOLUME_1S); vol1 = Clamp(vol1, 0, PCM_VOLUME_1S); return pcm_add_vol(dither, buffer1, buffer2, size, diff --git a/src/player/CrossFade.cxx b/src/player/CrossFade.cxx index 1bf2c46664..67e89f9865 100644 --- a/src/player/CrossFade.cxx +++ b/src/player/CrossFade.cxx @@ -7,10 +7,10 @@ #include "pcm/AudioFormat.hxx" #include "util/CNumberParser.hxx" #include "util/Domain.hxx" -#include "util/Math.hxx" #include "Log.hxx" #include +#include static constexpr Domain cross_fade_domain("cross_fade"); @@ -109,7 +109,7 @@ CrossFadeSettings::Calculate(float replay_gain_db, float replay_gain_prev_db, if (!IsMixRampEnabled() || !mixramp_start || !mixramp_prev_end) { - chunks = lround(duration / chunk_duration); + chunks = std::lround(duration / chunk_duration); } else { /* Calculate mixramp overlap. */ const auto mixramp_overlap_current = @@ -124,7 +124,7 @@ CrossFadeSettings::Calculate(float replay_gain_db, float replay_gain_prev_db, if (mixramp_overlap_current >= FloatDuration::zero() && mixramp_overlap_prev >= FloatDuration::zero() && mixramp_delay <= mixramp_overlap) { - chunks = lround((mixramp_overlap - mixramp_delay) + chunks = std::lround((mixramp_overlap - mixramp_delay) / chunk_duration); FmtDebug(cross_fade_domain, "will overlap {} chunks, {}s", chunks, diff --git a/src/util/Math.hxx b/src/util/Math.hxx deleted file mode 100644 index 8e557d79d6..0000000000 --- a/src/util/Math.hxx +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: BSD-2-Clause -// author: Max Kellermann - -#ifndef MATH_HXX -#define MATH_HXX - -#include - -/* - * C99 math can be optionally omitted with gcc's libstdc++. - * Use boost if unavailable. - */ -#if (defined(__GLIBCPP__) || defined(__GLIBCXX__)) && !defined(_GLIBCXX_USE_C99_MATH_TR1) -#include -using boost::math::lround; -#else -using std::lround; -#endif - -#endif From 61e9578fe1187128ed99c4200829ef2c5bf98a47 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 20 Nov 2025 10:53:31 +0100 Subject: [PATCH 2/2] util/HexFormat: add "requires" to prevent calling with dynamic extent --- src/util/HexFormat.hxx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/util/HexFormat.hxx b/src/util/HexFormat.hxx index bd135f3338..9755b8ac24 100644 --- a/src/util/HexFormat.hxx +++ b/src/util/HexFormat.hxx @@ -75,6 +75,7 @@ HexFormat(char *output, std::span input) noexcept * dump of the given fixed-size input. */ template +requires(size != std::dynamic_extent) constexpr auto HexFormat(std::span input) noexcept { @@ -84,6 +85,7 @@ HexFormat(std::span input) noexcept } template +requires(size != std::dynamic_extent) constexpr auto HexFormat(std::span input) noexcept {