Mercurial > hg > piper-cpp
comparison bits/PreservingPluginHandleMapper.h @ 57:7aec704705c7
Make the output ID mapper stuff safer by using shared_ptr
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Mon, 19 Sep 2016 14:43:32 +0100 |
parents | e90fd30990eb |
children | 8a4bcb3dc3a6 |
comparison
equal
deleted
inserted
replaced
56:815e94fedc1c | 57:7aec704705c7 |
---|---|
47 //!!! all | 47 //!!! all |
48 | 48 |
49 class PreservingPluginHandleMapper : public PluginHandleMapper | 49 class PreservingPluginHandleMapper : public PluginHandleMapper |
50 { | 50 { |
51 public: | 51 public: |
52 PreservingPluginHandleMapper() : m_handle(0), m_plugin(0) { } | 52 PreservingPluginHandleMapper() : |
53 m_handle(0), | |
54 m_plugin(0), | |
55 m_omapper(std::make_shared<PreservingPluginOutputIdMapper>()) { } | |
53 | 56 |
54 virtual Handle pluginToHandle(Vamp::Plugin *p) const { | 57 virtual Handle pluginToHandle(Vamp::Plugin *p) const { |
55 if (p == m_plugin) return m_handle; | 58 if (p == m_plugin) return m_handle; |
56 else { | 59 else { |
57 std::cerr << "PreservingPluginHandleMapper: p = " << p | 60 std::cerr << "PreservingPluginHandleMapper: p = " << p |
66 m_handle = h; | 69 m_handle = h; |
67 m_plugin = reinterpret_cast<Vamp::Plugin *>(h); | 70 m_plugin = reinterpret_cast<Vamp::Plugin *>(h); |
68 return m_plugin; | 71 return m_plugin; |
69 } | 72 } |
70 | 73 |
71 virtual const PluginOutputIdMapper &pluginToOutputIdMapper(Vamp::Plugin *) const { | 74 virtual const std::shared_ptr<PluginOutputIdMapper> pluginToOutputIdMapper |
75 (Vamp::Plugin *) const { | |
72 return m_omapper; | 76 return m_omapper; |
73 } | 77 } |
74 | 78 |
75 virtual const PluginOutputIdMapper &handleToOutputIdMapper(Handle h) const { | 79 virtual const std::shared_ptr<PluginOutputIdMapper> handleToOutputIdMapper |
80 (Handle h) const { | |
76 return m_omapper; | 81 return m_omapper; |
77 } | 82 } |
78 | 83 |
79 private: | 84 private: |
80 mutable Handle m_handle; | 85 mutable Handle m_handle; |
81 mutable Vamp::Plugin *m_plugin; | 86 mutable Vamp::Plugin *m_plugin; |
82 PreservingPluginOutputIdMapper m_omapper; | 87 std::shared_ptr<PreservingPluginOutputIdMapper> m_omapper; |
83 }; | 88 }; |
84 | 89 |
85 } | 90 } |
86 | 91 |
87 #endif | 92 #endif |