diff options
author | Max Kellermann <max@musicpd.org> | 2017-12-20 15:24:41 +0100 |
---|---|---|
committer | Max Kellermann <max@musicpd.org> | 2017-12-20 15:24:41 +0100 |
commit | 9f33c6fe03cc1a061d7ce81603654a4a3e285ab6 (patch) | |
tree | 5e088f94828fb68fb399eddf47a05d8c7cc06077 | |
parent | 73e69edac3fc6960d6bf89fca420c27f83b95d8e (diff) |
decoder/Bridge: use std::unique_ptr<Tag>
-rw-r--r-- | src/decoder/Bridge.cxx | 20 | ||||
-rw-r--r-- | src/decoder/Bridge.hxx | 11 | ||||
-rw-r--r-- | src/decoder/DecoderThread.cxx | 2 |
3 files changed, 13 insertions, 20 deletions
diff --git a/src/decoder/Bridge.cxx b/src/decoder/Bridge.cxx index d4038f0ac..d6138777e 100644 --- a/src/decoder/Bridge.cxx +++ b/src/decoder/Bridge.cxx @@ -47,10 +47,6 @@ DecoderBridge::~DecoderBridge() convert->Close(); delete convert; } - - delete song_tag; - delete stream_tag; - delete decoder_tag; } bool @@ -222,11 +218,11 @@ DecoderBridge::DoSendTag(const Tag &tag) bool DecoderBridge::UpdateStreamTag(InputStream *is) { - auto *tag = is != nullptr - ? is->LockReadTag().release() + auto tag = is != nullptr + ? is->LockReadTag() : nullptr; if (tag == nullptr) { - tag = song_tag; + tag = std::move(song_tag); if (tag == nullptr) return false; @@ -234,12 +230,9 @@ DecoderBridge::UpdateStreamTag(InputStream *is) instead */ } else /* discard the song tag; we don't need it */ - delete song_tag; - - song_tag = nullptr; + song_tag.reset(); - delete stream_tag; - stream_tag = tag; + stream_tag = std::move(tag); return true; } @@ -540,8 +533,7 @@ DecoderBridge::SubmitTag(InputStream *is, Tag &&tag) /* save the tag */ - delete decoder_tag; - decoder_tag = new Tag(std::move(tag)); + decoder_tag = std::make_unique<Tag>(std::move(tag)); /* check for a new stream tag */ diff --git a/src/decoder/Bridge.hxx b/src/decoder/Bridge.hxx index 3b354c063..a2f333f65 100644 --- a/src/decoder/Bridge.hxx +++ b/src/decoder/Bridge.hxx @@ -24,6 +24,7 @@ #include "ReplayGainInfo.hxx" #include <exception> +#include <memory> class PcmConvert; struct MusicChunk; @@ -74,13 +75,13 @@ public: * files, because we expect the stream server to send us a new * tag each time we play it. */ - Tag *song_tag; + std::unique_ptr<Tag> song_tag; /** the last tag received from the stream */ - Tag *stream_tag = nullptr; + std::unique_ptr<Tag> stream_tag; /** the last tag received from the decoder plugin */ - Tag *decoder_tag = nullptr; + std::unique_ptr<Tag> decoder_tag; /** the chunk currently being written to */ MusicChunk *current_chunk = nullptr; @@ -100,10 +101,10 @@ public: std::exception_ptr error; DecoderBridge(DecoderControl &_dc, bool _initial_seek_pending, - Tag *_tag) + std::unique_ptr<Tag> _tag) :dc(_dc), initial_seek_pending(_initial_seek_pending), - song_tag(_tag) {} + song_tag(std::move(_tag)) {} ~DecoderBridge(); diff --git a/src/decoder/DecoderThread.cxx b/src/decoder/DecoderThread.cxx index f09592828..39c6460a2 100644 --- a/src/decoder/DecoderThread.cxx +++ b/src/decoder/DecoderThread.cxx @@ -447,7 +447,7 @@ decoder_run_song(DecoderControl &dc, file - tags on "stream" songs are just remembered from the last time we played it*/ - song.IsFile() ? new Tag(song.GetTag()) : nullptr); + song.IsFile() ? std::make_unique<Tag>(song.GetTag()) : nullptr); dc.state = DecoderState::START; dc.CommandFinishedLocked(); |