1
Fork 0

Add model::addChannelShared() function

This commit is contained in:
gvnnz 2023-06-12 23:03:47 +02:00
parent f51d5bf052
commit 833e0aaabf
4 changed files with 15 additions and 23 deletions

View File

@ -74,9 +74,9 @@ void ChannelManager::reset(Frame framesInBuffer)
m_model.get().channels.add(masterInData.channel);
m_model.get().channels.add(previewData.channel);
m_model.addShared(std::move(masterOutData.shared));
m_model.addShared(std::move(masterInData.shared));
m_model.addShared(std::move(previewData.shared));
m_model.addChannelShared(std::move(masterOutData.shared));
m_model.addChannelShared(std::move(masterInData.shared));
m_model.addChannelShared(std::move(previewData.shared));
m_model.swap(model::SwapType::NONE);
}
@ -99,7 +99,7 @@ Channel& ChannelManager::addChannel(ChannelType type, ID columnId, int position,
channelFactory::Data data = channelFactory::create(/*id=*/0, type, columnId, position, bufferSize, rsmpQuality, overdubProtectionDefaultOn);
m_model.get().channels.add(data.channel);
m_model.addShared(std::move(data.shared));
m_model.addChannelShared(std::move(data.shared));
m_model.swap(model::SwapType::HARD);
triggerOnChannelsAltered();
@ -165,7 +165,7 @@ void ChannelManager::cloneChannel(ID channelId, int bufferSize, const std::vecto
/* Then push the new channel in the channels vector. */
m_model.get().channels.add(newChannelData.channel);
m_model.addShared(std::move(newChannelData.shared));
m_model.addChannelShared(std::move(newChannelData.shared));
m_model.swap(model::SwapType::HARD);
}

View File

@ -254,7 +254,7 @@ LoadState Model::load(const Patch& patch, PluginManager& pluginManager, int samp
std::vector<Plugin*> plugins = findPlugins(pchannel.pluginIds);
channelFactory::Data data = channelFactory::deserializeChannel(pchannel, sampleRateRatio, bufferSize, rsmpQuality, wave, plugins);
layout.channels.add(data.channel);
addShared(std::move(data.shared));
getAllChannelsShared().push_back(std::move(data.shared));
}
getAllActions() = actionFactory::deserializeActions(patch.actions);
@ -423,18 +423,12 @@ Plugin& Model::addPlugin(std::unique_ptr<Plugin> p)
return add_(m_shared.plugins, std::move(p));
}
template <typename T>
typename T::element_type& Model::addShared(T obj)
ChannelShared& Model::addChannelShared(std::unique_ptr<ChannelShared> cs)
{
if constexpr (std::is_same_v<T, ChannelSharedPtr>)
{
m_shared.channelsShared.push_back(std::move(obj));
return *m_shared.channelsShared.back().get();
}
DataLock lock = lockData(SwapType::NONE);
return add_(m_shared.channelsShared, std::move(cs));
}
template ChannelShared& Model::addShared<ChannelSharedPtr>(ChannelSharedPtr p);
/* -------------------------------------------------------------------------- */
template <typename T>

View File

@ -193,15 +193,13 @@ public:
Plugin* findPlugin(ID);
Wave* findWave(ID);
/* addShared
/* add[*]
Adds some shared data (by moving it). Returns a reference to the last added
shared item. */
template <typename T>
typename T::element_type& addShared(T);
Wave& addWave(std::unique_ptr<Wave>);
Plugin& addPlugin(std::unique_ptr<Plugin>);
Wave& addWave(std::unique_ptr<Wave>);
Plugin& addPlugin(std::unique_ptr<Plugin>);
ChannelShared& addChannelShared(std::unique_ptr<ChannelShared>);
template <typename T>
void removeShared(const T&);

View File

@ -24,8 +24,8 @@ TEST_CASE("ActionRecorder")
channelFactory::Data channel2 = channelFactory::create(channelID2, ChannelType::SAMPLE, 0, 0, 1024, Resampler::Quality::LINEAR, false);
model.get().channels.getAll() = {channel1.channel, channel2.channel};
model.addShared(std::move(channel1.shared));
model.addShared(std::move(channel2.shared));
model.addChannelShared(std::move(channel1.shared));
model.addChannelShared(std::move(channel2.shared));
model.swap(model::SwapType::NONE);
ActionRecorder ar(model);