comparison 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
comparison
equal deleted inserted replaced
1741:9d82b164f264 1742:52705a328b34
15 15
16 #include "PlayParameterRepository.h" 16 #include "PlayParameterRepository.h"
17 #include "PlayParameters.h" 17 #include "PlayParameters.h"
18 #include "Playable.h" 18 #include "Playable.h"
19 19
20 #include "ById.h"
21
20 #include <iostream> 22 #include <iostream>
21 23
22 PlayParameterRepository * 24 PlayParameterRepository *
23 PlayParameterRepository::m_instance = new PlayParameterRepository; 25 PlayParameterRepository::m_instance = new PlayParameterRepository;
24 26
31 PlayParameterRepository::~PlayParameterRepository() 33 PlayParameterRepository::~PlayParameterRepository()
32 { 34 {
33 } 35 }
34 36
35 void 37 void
36 PlayParameterRepository::addPlayable(const Playable *playable) 38 PlayParameterRepository::addPlayable(int playableId)
37 { 39 {
38 // cerr << "PlayParameterRepository:addPlayable playable = " << playable << endl; 40 // cerr << "PlayParameterRepository:addPlayable playable = " << playable << endl;
39 41
40 if (!getPlayParameters(playable)) { 42 if (!getPlayParameters(playableId)) {
41 43
44 auto playable = AnyById::getAs<Playable>(playableId);
45 if (!playable) {
46 SVCERR << "ERROR: id passed to PlayParameterRepository::addPlayable is not that of a Playable" << endl;
47 return;
48 }
49
42 // Give all playables the same type of play parameters for the 50 // Give all playables the same type of play parameters for the
43 // moment 51 // moment
44 52
45 // cerr << "PlayParameterRepository:addPlayable: Adding play parameters for " << playable << endl; 53 // cerr << "PlayParameterRepository:addPlayable: Adding play parameters for " << playable << endl;
46 54
47 PlayParameters *params = new PlayParameters; 55 PlayParameters *params = new PlayParameters;
48 m_playParameters[playable] = params; 56 m_playParameters[playableId] = params;
49 57
50 params->setPlayClipId 58 params->setPlayClipId
51 (playable->getDefaultPlayClipId()); 59 (playable->getDefaultPlayClipId());
52 60
53 params->setPlayAudible 61 params->setPlayAudible
63 // << playable << " to this " << this << endl; 71 // << playable << " to this " << this << endl;
64 } 72 }
65 } 73 }
66 74
67 void 75 void
68 PlayParameterRepository::removePlayable(const Playable *playable) 76 PlayParameterRepository::removePlayable(int playableId)
69 { 77 {
70 if (m_playParameters.find(playable) == m_playParameters.end()) { 78 if (m_playParameters.find(playableId) == m_playParameters.end()) {
71 cerr << "WARNING: PlayParameterRepository::removePlayable: unknown playable " << playable << endl; 79 SVCERR << "WARNING: PlayParameterRepository::removePlayable: unknown playable " << playableId << endl;
72 return; 80 return;
73 } 81 }
74 delete m_playParameters[playable]; 82 delete m_playParameters[playableId];
75 m_playParameters.erase(playable); 83 m_playParameters.erase(playableId);
76 } 84 }
77 85
78 void 86 void
79 PlayParameterRepository::copyParameters(const Playable *from, const Playable *to) 87 PlayParameterRepository::copyParameters(int from, int to)
80 { 88 {
81 if (!getPlayParameters(from)) { 89 if (!getPlayParameters(from)) {
82 cerr << "ERROR: PlayParameterRepository::copyParameters: source playable unknown" << endl; 90 cerr << "ERROR: PlayParameterRepository::copyParameters: source playable unknown" << endl;
83 return; 91 return;
84 } 92 }
88 } 96 }
89 getPlayParameters(to)->copyFrom(getPlayParameters(from)); 97 getPlayParameters(to)->copyFrom(getPlayParameters(from));
90 } 98 }
91 99
92 PlayParameters * 100 PlayParameters *
93 PlayParameterRepository::getPlayParameters(const Playable *playable) 101 PlayParameterRepository::getPlayParameters(int playableId)
94 { 102 {
95 if (m_playParameters.find(playable) == m_playParameters.end()) return nullptr; 103 if (m_playParameters.find(playableId) == m_playParameters.end()) {
96 return m_playParameters.find(playable)->second; 104 return nullptr;
105 }
106 return m_playParameters.find(playableId)->second;
97 } 107 }
98 108
99 void 109 void
100 PlayParameterRepository::playParametersChanged() 110 PlayParameterRepository::playParametersChanged()
101 { 111 {