Mercurial > hg > svcore
diff base/PlayParameterRepository.cpp @ 1742:52705a328b34 by-id
Rejig ById so as to put everything in a single pool, so that at the core you can go from numeric id (untyped) to anything the object can be dynamic_cast to. Useful for building other abstractions like PlayParameter-type registrations that don't know about e.g. Models. Probably some more tweaking needed. Also add tests
author | Chris Cannam |
---|---|
date | Fri, 28 Jun 2019 17:36:30 +0100 |
parents | 70e172e6cc59 |
children | 77543124651b |
line wrap: on
line diff
--- a/base/PlayParameterRepository.cpp Thu Jun 27 13:08:10 2019 +0100 +++ b/base/PlayParameterRepository.cpp Fri Jun 28 17:36:30 2019 +0100 @@ -17,6 +17,8 @@ #include "PlayParameters.h" #include "Playable.h" +#include "ById.h" + #include <iostream> PlayParameterRepository * @@ -33,19 +35,25 @@ } void -PlayParameterRepository::addPlayable(const Playable *playable) +PlayParameterRepository::addPlayable(int playableId) { // cerr << "PlayParameterRepository:addPlayable playable = " << playable << endl; - if (!getPlayParameters(playable)) { + if (!getPlayParameters(playableId)) { + auto playable = AnyById::getAs<Playable>(playableId); + if (!playable) { + SVCERR << "ERROR: id passed to PlayParameterRepository::addPlayable is not that of a Playable" << endl; + return; + } + // Give all playables the same type of play parameters for the // moment // cerr << "PlayParameterRepository:addPlayable: Adding play parameters for " << playable << endl; PlayParameters *params = new PlayParameters; - m_playParameters[playable] = params; + m_playParameters[playableId] = params; params->setPlayClipId (playable->getDefaultPlayClipId()); @@ -65,18 +73,18 @@ } void -PlayParameterRepository::removePlayable(const Playable *playable) +PlayParameterRepository::removePlayable(int playableId) { - if (m_playParameters.find(playable) == m_playParameters.end()) { - cerr << "WARNING: PlayParameterRepository::removePlayable: unknown playable " << playable << endl; + if (m_playParameters.find(playableId) == m_playParameters.end()) { + SVCERR << "WARNING: PlayParameterRepository::removePlayable: unknown playable " << playableId << endl; return; } - delete m_playParameters[playable]; - m_playParameters.erase(playable); + delete m_playParameters[playableId]; + m_playParameters.erase(playableId); } void -PlayParameterRepository::copyParameters(const Playable *from, const Playable *to) +PlayParameterRepository::copyParameters(int from, int to) { if (!getPlayParameters(from)) { cerr << "ERROR: PlayParameterRepository::copyParameters: source playable unknown" << endl; @@ -90,10 +98,12 @@ } PlayParameters * -PlayParameterRepository::getPlayParameters(const Playable *playable) +PlayParameterRepository::getPlayParameters(int playableId) { - if (m_playParameters.find(playable) == m_playParameters.end()) return nullptr; - return m_playParameters.find(playable)->second; + if (m_playParameters.find(playableId) == m_playParameters.end()) { + return nullptr; + } + return m_playParameters.find(playableId)->second; } void