From c2997b9b1a5b831e76b1779aa957f2312a6e5089 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Wed, 23 Mar 2016 22:38:44 +0100 Subject: Settings. --- src/settings.h | 94 +++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 60 insertions(+), 34 deletions(-) (limited to 'src/settings.h') diff --git a/src/settings.h b/src/settings.h index 74c432d..4eb7dba 100644 --- a/src/settings.h +++ b/src/settings.h @@ -27,14 +27,40 @@ #pragma once #include +#include #include +class MyString { +public: + std::string value; +}; + +//! Engine settings +struct Settings +{ + std::atomic enable_velocity_modifier; + std::atomic velocity_modifier_falloff; + std::atomic velocity_modifier_weight; + + std::atomic enable_velocity_randomiser; + std::atomic velocity_randomiser_weight; + + std::atomic samplerate; + + std::atomic enable_resampling; + + std::atomic number_of_files; + std::atomic number_of_files_loaded; + //std::atomic current_file; + +}; + +//! Getter utility class. template class SettingRef { public: SettingRef(std::atomic& value) - : value{value} - , cache{} + : value(value) { // string isn't lock free either assert((std::is_same::value || value.is_lock_free())); @@ -57,20 +83,7 @@ private: std::atomic cache; }; -struct Settings -{ - std::atomic enable_velocity_modifier; - std::atomic velocity_modifier_falloff; - std::atomic velocity_modifier_weight; - - std::atomic enable_velocity_randomiser; - std::atomic velocity_randomiser_weight; - - std::atomic samplerate; - - std::atomic enable_resampling; -}; - +//! Combined getter class. struct SettingsGetter { SettingRef enable_velocity_modifier; @@ -80,10 +93,14 @@ struct SettingsGetter SettingRef enable_velocity_randomiser; SettingRef velocity_randomiser_weight; - SettingRef samplerate; + SettingRef samplerate; SettingRef enable_resampling; + SettingRef number_of_files; + SettingRef number_of_files_loaded; + //SettingRef current_file; + SettingsGetter(Settings& settings) : enable_velocity_modifier{settings.enable_velocity_modifier} , velocity_modifier_falloff{settings.velocity_modifier_falloff} @@ -92,6 +109,9 @@ struct SettingsGetter , velocity_randomiser_weight{settings.velocity_randomiser_weight} , samplerate{settings.samplerate} , enable_resampling{settings.enable_resampling} + , number_of_files{settings.number_of_files} + , number_of_files_loaded{settings.number_of_files_loaded} + //, current_file{settings.current_file} { } }; @@ -99,29 +119,35 @@ struct SettingsGetter // lovely reminder: NO, GLOCKE. NOOOO!! /* enum class IntParams { - Foo = 0 + Foo = 0 }; -struct Settings { - std::array, 5> ints; +struct Settings +{ + std::array, 5> ints; - Settings() - : ints{} { - //get(IntParams::Foo).store(3); - } + Settings() + : ints{} + { + //get(IntParams::Foo).store(3); + } - std::atomic& get(IntParams param) { - return ints[(size_t)param]; - } + std::atomic& get(IntParams param) + { + return ints[(size_t)param]; + } }; -struct SettingsGetter { - std::vector> ints; +struct SettingsGetter +{ + std::vector> ints; - SettingsGetter(Settings& parent) { - for (auto& atomic: parent.ints) { - ints.emplace_back(atomic); - } - } + SettingsGetter(Settings& parent) + { + for(auto& atomic: parent.ints) + { + ints.emplace_back(atomic); + } + } }; */ -- cgit v1.2.3 From bd1434b6cfc59c37362ea6f462034f8265072c9a Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Wed, 23 Mar 2016 23:02:35 +0100 Subject: Use new Atomic class. --- src/settings.h | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) (limited to 'src/settings.h') diff --git a/src/settings.h b/src/settings.h index 4eb7dba..eb18909 100644 --- a/src/settings.h +++ b/src/settings.h @@ -30,28 +30,25 @@ #include #include -class MyString { -public: - std::string value; -}; +#include "atomic.h" //! Engine settings struct Settings { - std::atomic enable_velocity_modifier; - std::atomic velocity_modifier_falloff; - std::atomic velocity_modifier_weight; + Atomic enable_velocity_modifier; + Atomic velocity_modifier_falloff; + Atomic velocity_modifier_weight; - std::atomic enable_velocity_randomiser; - std::atomic velocity_randomiser_weight; + Atomic enable_velocity_randomiser; + Atomic velocity_randomiser_weight; - std::atomic samplerate; + Atomic samplerate; - std::atomic enable_resampling; + Atomic enable_resampling; - std::atomic number_of_files; - std::atomic number_of_files_loaded; - //std::atomic current_file; + Atomic number_of_files; + Atomic number_of_files_loaded; + Atomic current_file; }; @@ -59,7 +56,7 @@ struct Settings template class SettingRef { public: - SettingRef(std::atomic& value) + SettingRef(Atomic& value) : value(value) { // string isn't lock free either @@ -79,8 +76,8 @@ public: } private: - std::atomic& value; - std::atomic cache; + Atomic& value; + Atomic cache; }; //! Combined getter class. @@ -99,7 +96,7 @@ struct SettingsGetter SettingRef number_of_files; SettingRef number_of_files_loaded; - //SettingRef current_file; + SettingRef current_file; SettingsGetter(Settings& settings) : enable_velocity_modifier{settings.enable_velocity_modifier} @@ -111,7 +108,7 @@ struct SettingsGetter , enable_resampling{settings.enable_resampling} , number_of_files{settings.number_of_files} , number_of_files_loaded{settings.number_of_files_loaded} - //, current_file{settings.current_file} + , current_file{settings.current_file} { } }; -- cgit v1.2.3 From 04e532a2a079ceb6acfcb4ebfaca58315fe1ff2d Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Wed, 23 Mar 2016 22:38:44 +0100 Subject: Settings. --- src/settings.h | 1 - 1 file changed, 1 deletion(-) (limited to 'src/settings.h') diff --git a/src/settings.h b/src/settings.h index eb18909..ed031b2 100644 --- a/src/settings.h +++ b/src/settings.h @@ -49,7 +49,6 @@ struct Settings Atomic number_of_files; Atomic number_of_files_loaded; Atomic current_file; - }; //! Getter utility class. -- cgit v1.2.3 From 19691923340e5984e3ace837d39938f718fee608 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Thu, 31 Mar 2016 22:11:07 +0200 Subject: Removed the last Conf:: namespace usage and replaced it with Settings. --- src/settings.h | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) (limited to 'src/settings.h') diff --git a/src/settings.h b/src/settings.h index ed031b2..2700e26 100644 --- a/src/settings.h +++ b/src/settings.h @@ -31,20 +31,34 @@ #include #include "atomic.h" +//bool Conf::enable_velocity_modifier = true; +//float Conf::velocity_modifier_falloff = 0.5; +//float Conf::velocity_modifier_weight = 0.25; +// +//bool Conf::enable_velocity_randomiser = false; +//float Conf::velocity_randomiser_weight = 0.1; +// +//int Conf::samplerate = 44100; +// +//bool Conf::enable_resampling = true; + +//operator Atomic //! Engine settings struct Settings { - Atomic enable_velocity_modifier; - Atomic velocity_modifier_falloff; - Atomic velocity_modifier_weight; + Atomic foo{"foo"}; - Atomic enable_velocity_randomiser; - Atomic velocity_randomiser_weight; + Atomic enable_velocity_modifier{true}; + Atomic velocity_modifier_falloff{0.5}; + Atomic velocity_modifier_weight{0.25}; - Atomic samplerate; + Atomic enable_velocity_randomiser{false}; + Atomic velocity_randomiser_weight{0.1}; - Atomic enable_resampling; + Atomic samplerate{44100.0}; + + Atomic enable_resampling{true}; Atomic number_of_files; Atomic number_of_files_loaded; @@ -66,6 +80,13 @@ public: { T tmp = cache; cache.exchange(value); + + if(firstAccess) + { + firstAccess = false; + return true; + } + return tmp == cache; } @@ -75,6 +96,7 @@ public: } private: + bool firstAccess{true}; Atomic& value; Atomic cache; }; -- cgit v1.2.3 From b530ac02af61e320e137a392decef1b3cc5af2c4 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 3 Apr 2016 17:40:50 +0200 Subject: Fix logic error in SettingRef::hasChanged(). --- src/settings.h | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) (limited to 'src/settings.h') diff --git a/src/settings.h b/src/settings.h index 2700e26..b132c1b 100644 --- a/src/settings.h +++ b/src/settings.h @@ -31,30 +31,16 @@ #include #include "atomic.h" -//bool Conf::enable_velocity_modifier = true; -//float Conf::velocity_modifier_falloff = 0.5; -//float Conf::velocity_modifier_weight = 0.25; -// -//bool Conf::enable_velocity_randomiser = false; -//float Conf::velocity_randomiser_weight = 0.1; -// -//int Conf::samplerate = 44100; -// -//bool Conf::enable_resampling = true; - -//operator Atomic //! Engine settings struct Settings { - Atomic foo{"foo"}; - Atomic enable_velocity_modifier{true}; - Atomic velocity_modifier_falloff{0.5}; - Atomic velocity_modifier_weight{0.25}; + Atomic velocity_modifier_falloff{0.5f}; + Atomic velocity_modifier_weight{0.25f}; Atomic enable_velocity_randomiser{false}; - Atomic velocity_randomiser_weight{0.1}; + Atomic velocity_randomiser_weight{0.1f}; Atomic samplerate{44100.0}; @@ -87,7 +73,7 @@ public: return true; } - return tmp == cache; + return tmp != cache; } T getValue() const -- cgit v1.2.3 From 057ef1d83ba263fb2adf1aa86f8e281ab0065c43 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 8 Apr 2016 00:15:32 +0200 Subject: Refactoring to finally get rid of MessageHandler/Receiver in favor of the new Settings mechanism. --- src/settings.h | 123 ++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 86 insertions(+), 37 deletions(-) (limited to 'src/settings.h') diff --git a/src/settings.h b/src/settings.h index b132c1b..c79e4e5 100644 --- a/src/settings.h +++ b/src/settings.h @@ -31,10 +31,25 @@ #include #include "atomic.h" +#include "notifier.h" + +enum class LoadStatus : unsigned int +{ + Idle, + Loading, + Done, + Error +}; //! Engine settings struct Settings { + Atomic drumkit_file; + Atomic drumkit_load_status{LoadStatus::Idle}; + + Atomic midimap_file; + Atomic midimap_load_status{LoadStatus::Idle}; + Atomic enable_velocity_modifier{true}; Atomic velocity_modifier_falloff{0.5f}; Atomic velocity_modifier_weight{0.25f}; @@ -51,45 +66,15 @@ struct Settings Atomic current_file; }; -//! Getter utility class. -template class SettingRef +//! Settings getter class. +struct SettingsGetter { -public: - SettingRef(Atomic& value) - : value(value) - { - // string isn't lock free either - assert((std::is_same::value || value.is_lock_free())); - } - - bool hasChanged() - { - T tmp = cache; - cache.exchange(value); - - if(firstAccess) - { - firstAccess = false; - return true; - } - - return tmp != cache; - } - - T getValue() const - { - return cache; - } + SettingRef drumkit_file; + SettingRef drumkit_load_status; -private: - bool firstAccess{true}; - Atomic& value; - Atomic cache; -}; + SettingRef midimap_file; + SettingRef midimap_load_status; -//! Combined getter class. -struct SettingsGetter -{ SettingRef enable_velocity_modifier; SettingRef velocity_modifier_falloff; SettingRef velocity_modifier_weight; @@ -106,7 +91,11 @@ struct SettingsGetter SettingRef current_file; SettingsGetter(Settings& settings) - : enable_velocity_modifier{settings.enable_velocity_modifier} + : drumkit_file(settings.drumkit_file) + , drumkit_load_status(settings.drumkit_load_status) + , midimap_file(settings.midimap_file) + , midimap_load_status(settings.midimap_load_status) + , enable_velocity_modifier{settings.enable_velocity_modifier} , velocity_modifier_falloff{settings.velocity_modifier_falloff} , velocity_modifier_weight{settings.velocity_modifier_weight} , enable_velocity_randomiser{settings.enable_velocity_randomiser} @@ -120,6 +109,66 @@ struct SettingsGetter } }; +//! Settings change notifier class. +class SettingsNotifier +{ +public: + Notifier drumkit_file; + Notifier drumkit_load_status; + + Notifier midimap_file; + Notifier midimap_load_status; + + Notifier enable_velocity_modifier; + Notifier velocity_modifier_falloff; + Notifier velocity_modifier_weight; + + Notifier enable_velocity_randomiser; + Notifier velocity_randomiser_weight; + + Notifier samplerate; + + Notifier enable_resampling; + + Notifier number_of_files; + Notifier number_of_files_loaded; + Notifier current_file; + + void evaluate() + { +#define EVAL(x) if(settings.x.hasChanged()) { x(settings.x.getValue()); } + + EVAL(drumkit_file); + EVAL(drumkit_load_status); + + EVAL(midimap_file); + EVAL(midimap_load_status); + + EVAL(enable_velocity_modifier); + EVAL(velocity_modifier_falloff); + EVAL(velocity_modifier_weight); + + EVAL(enable_velocity_randomiser); + EVAL(velocity_randomiser_weight); + + EVAL(samplerate); + + EVAL(enable_resampling); + + EVAL(number_of_files); + EVAL(number_of_files_loaded); + EVAL(current_file); + } + + SettingsNotifier(Settings& settings) + : settings(settings) + { + } + +private: + SettingsGetter settings; +}; + // lovely reminder: NO, GLOCKE. NOOOO!! /* enum class IntParams { -- cgit v1.2.3 From 35e804b984c28131fe13d229c5a0867762c6e8cf Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sat, 16 Apr 2016 13:23:11 +0200 Subject: Some DrumKitLoader refactoring. --- src/settings.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/settings.h') diff --git a/src/settings.h b/src/settings.h index c79e4e5..6b4e882 100644 --- a/src/settings.h +++ b/src/settings.h @@ -61,8 +61,8 @@ struct Settings Atomic enable_resampling{true}; - Atomic number_of_files; - Atomic number_of_files_loaded; + Atomic number_of_files; + Atomic number_of_files_loaded; Atomic current_file; }; @@ -86,8 +86,8 @@ struct SettingsGetter SettingRef enable_resampling; - SettingRef number_of_files; - SettingRef number_of_files_loaded; + SettingRef number_of_files; + SettingRef number_of_files_loaded; SettingRef current_file; SettingsGetter(Settings& settings) @@ -130,8 +130,8 @@ public: Notifier enable_resampling; - Notifier number_of_files; - Notifier number_of_files_loaded; + Notifier number_of_files; + Notifier number_of_files_loaded; Notifier current_file; void evaluate() -- cgit v1.2.3