Mercurial > hg > svcore
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 { |