@@ -40,6 +40,7 @@ void EffectRack::setEffect(size_t index, EffectS effect)
4040 std::lock_guard<std::recursive_mutex> lock { m_mutex };
4141 if (index < m_effects.size ()) {
4242 m_effects[index] = std::move (effect);
43+ markChanged ();
4344 }
4445}
4546
@@ -48,6 +49,7 @@ void EffectRack::swapEffects(size_t indexA, size_t indexB)
4849 std::lock_guard<std::recursive_mutex> lock { m_mutex };
4950 if (indexA < m_effects.size () && indexB < m_effects.size ()) {
5051 std::swap (m_effects[indexA], m_effects[indexB]);
52+ markChanged ();
5153 }
5254}
5355
@@ -56,9 +58,20 @@ void EffectRack::removeEffect(size_t index)
5658 std::lock_guard<std::recursive_mutex> lock { m_mutex };
5759 if (index < m_effects.size ()) {
5860 m_effects.erase (m_effects.begin () + index);
61+ markChanged ();
5962 }
6063}
6164
65+ void EffectRack::markChanged ()
66+ {
67+ m_version.fetch_add (1 , std::memory_order_release);
68+ }
69+
70+ uint64_t EffectRack::version () const
71+ {
72+ return m_version.load (std::memory_order_acquire);
73+ }
74+
6275EffectRack::EffectS EffectRack::effect (size_t index) const
6376{
6477 std::lock_guard<std::recursive_mutex> lock { m_mutex };
@@ -172,6 +185,7 @@ void EffectRack::clear()
172185{
173186 std::lock_guard<std::recursive_mutex> lock { m_mutex };
174187 std::fill (m_effects.begin (), m_effects.end (), nullptr );
188+ markChanged ();
175189}
176190
177191void EffectRack::serializeEffectsToXml (ProjectWriter & writer) const
@@ -195,6 +209,7 @@ void EffectRack::deserializeEffectsFromXml(ProjectReader & reader)
195209{
196210 std::lock_guard<std::recursive_mutex> lock { m_mutex };
197211 std::fill (m_effects.begin (), m_effects.end (), nullptr );
212+ markChanged ();
198213
199214 while (reader.readNextStartElement ()) {
200215 if (reader.name () == Constants::NahdXml::xmlKeyEffect ()) {
@@ -224,6 +239,7 @@ void EffectRack::deserializeEffect(ProjectReader & reader)
224239 m_effects.resize (targetIndex + 1 , nullptr );
225240 }
226241 m_effects[targetIndex] = std::move (effect);
242+ markChanged ();
227243 } else {
228244 reader.skipCurrentElement ();
229245 }
@@ -280,6 +296,7 @@ bool EffectRack::importEffectSettings(size_t index, ProjectReader & reader)
280296 effect->deserializeParametersFromXml (reader);
281297 effect->sync ();
282298 m_effects[index] = std::move (effect);
299+ markChanged ();
283300 return true ;
284301 } else {
285302 reader.skipCurrentElement ();
@@ -297,6 +314,7 @@ bool EffectRack::importEffectSettings(size_t index, ProjectReader & reader)
297314 effect->deserializeParametersFromXml (reader);
298315 effect->sync ();
299316 m_effects[index] = std::move (effect);
317+ markChanged ();
300318 return true ;
301319 } else {
302320 reader.skipCurrentElement ();
0 commit comments