filter/Plugin: return std::unique_ptr<PreparedFilter>

This commit is contained in:
Max Kellermann
2017-12-27 09:17:15 +01:00
parent 0e3ff12dd3
commit e2621d5e44
24 changed files with 87 additions and 74 deletions

View File

@@ -27,21 +27,20 @@
class FilterObserver::PreparedProxy final : public PreparedFilter {
FilterObserver &observer;
PreparedFilter *const prepared_filter;
std::unique_ptr<PreparedFilter> prepared_filter;
Proxy *child = nullptr;
public:
PreparedProxy(FilterObserver &_observer,
PreparedFilter *_prepared_filter)
std::unique_ptr<PreparedFilter> _prepared_filter)
:observer(_observer),
prepared_filter(_prepared_filter) {}
prepared_filter(std::move(_prepared_filter)) {}
~PreparedProxy() {
assert(child == nullptr);
assert(observer.proxy == this);
observer.proxy = nullptr;
delete prepared_filter;
}
void Clear(gcc_unused Proxy *_child) {
@@ -95,12 +94,14 @@ FilterObserver::PreparedProxy::Open(AudioFormat &af)
return child = new Proxy(*this, f);
}
PreparedFilter *
FilterObserver::Set(PreparedFilter *pf)
std::unique_ptr<PreparedFilter>
FilterObserver::Set(std::unique_ptr<PreparedFilter> pf)
{
assert(proxy == nullptr);
return proxy = new PreparedProxy(*this, pf);
auto p = std::make_unique<PreparedProxy>(*this, std::move(pf));
proxy = p.get();
return p;
}
Filter *