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