From 52a1ff4d4b519ce290da5c07a22a31b2b85bf45b Mon Sep 17 00:00:00 2001 From: Ben Wiederhake Date: Sun, 31 Oct 2021 23:38:04 +0100 Subject: [PATCH] LibDSP+Piano: Fix visibility of Object-derivative constructors Derivatives of Core::Object should be constructed through ClassName::construct(), to avoid handling ref-counted objects with refcount zero. Fixing the visibility means that misuses like this are more difficult. This commit is separate from the other Applications/Libraries changes because it required additional adaption of the code. Note that the old code did precisely what these changes try to prevent: Create and handle a ref-counted object with a refcount of zero. --- Userland/Applications/Piano/Track.cpp | 2 +- Userland/Libraries/LibDSP/Transport.h | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Userland/Applications/Piano/Track.cpp b/Userland/Applications/Piano/Track.cpp index 5727a945f7..1cd6b7be71 100644 --- a/Userland/Applications/Piano/Track.cpp +++ b/Userland/Applications/Piano/Track.cpp @@ -15,7 +15,7 @@ Track::Track(const u32& time) : m_time(time) - , m_temporary_transport(make_ref_counted(120, 4)) + , m_temporary_transport(LibDSP::Transport::construct(120, 4)) , m_delay(make_ref_counted(m_temporary_transport)) { set_volume(volume_max); diff --git a/Userland/Libraries/LibDSP/Transport.h b/Userland/Libraries/LibDSP/Transport.h index d588ca0334..9fc77da63c 100644 --- a/Userland/Libraries/LibDSP/Transport.h +++ b/Userland/Libraries/LibDSP/Transport.h @@ -16,6 +16,14 @@ namespace LibDSP { class Transport final : public Core::Object { C_OBJECT(Transport) public: + u32 const& time() const { return m_time; } + u16 beats_per_minute() const { return m_beats_per_minute; } + double current_second() const { return m_time / m_sample_rate; } + double samples_per_measure() const { return (1.0 / m_beats_per_minute) * 60.0 * m_sample_rate; } + double sample_rate() const { return m_sample_rate; } + double current_measure() const { return m_time / samples_per_measure(); } + +private: Transport(u16 beats_per_minute, u8 beats_per_measure, u32 sample_rate) : m_beats_per_minute(beats_per_minute) , m_beats_per_measure(beats_per_measure) @@ -27,14 +35,6 @@ public: { } - u32 const& time() const { return m_time; } - u16 beats_per_minute() const { return m_beats_per_minute; } - double current_second() const { return m_time / m_sample_rate; } - double samples_per_measure() const { return (1.0 / m_beats_per_minute) * 60.0 * m_sample_rate; } - double sample_rate() const { return m_sample_rate; } - double current_measure() const { return m_time / samples_per_measure(); } - -private: u32 m_time { 0 }; u16 const m_beats_per_minute { 0 }; u8 const m_beats_per_measure { 0 };