IcyMetaDataParser: return std::unique_ptr<Tag>
This commit is contained in:
parent
6b77ee9a5e
commit
99f4bce112
@ -39,7 +39,7 @@ IcyMetaDataParser::Reset() noexcept
|
|||||||
if (data_rest == 0 && meta_size > 0)
|
if (data_rest == 0 && meta_size > 0)
|
||||||
delete[] meta_data;
|
delete[] meta_data;
|
||||||
|
|
||||||
delete tag;
|
tag.reset();
|
||||||
|
|
||||||
data_rest = data_size;
|
data_rest = data_size;
|
||||||
meta_size = 0;
|
meta_size = 0;
|
||||||
@ -209,9 +209,7 @@ IcyMetaDataParser::Meta(const void *data, size_t length) noexcept
|
|||||||
if (meta_position == meta_size) {
|
if (meta_position == meta_size) {
|
||||||
/* parse */
|
/* parse */
|
||||||
|
|
||||||
delete tag;
|
tag = icy_parse_tag(meta_data, meta_data + meta_size);
|
||||||
|
|
||||||
tag = icy_parse_tag(meta_data, meta_data + meta_size).release();
|
|
||||||
delete[] meta_data;
|
delete[] meta_data;
|
||||||
|
|
||||||
/* change back to normal data mode */
|
/* change back to normal data mode */
|
||||||
|
@ -20,9 +20,11 @@
|
|||||||
#ifndef MPD_ICY_META_DATA_PARSER_HXX
|
#ifndef MPD_ICY_META_DATA_PARSER_HXX
|
||||||
#define MPD_ICY_META_DATA_PARSER_HXX
|
#define MPD_ICY_META_DATA_PARSER_HXX
|
||||||
|
|
||||||
#include <stddef.h>
|
#include "tag/Tag.hxx"
|
||||||
|
|
||||||
struct Tag;
|
#include <memory>
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
class IcyMetaDataParser {
|
class IcyMetaDataParser {
|
||||||
size_t data_size = 0, data_rest;
|
size_t data_size = 0, data_rest;
|
||||||
@ -30,7 +32,7 @@ class IcyMetaDataParser {
|
|||||||
size_t meta_size, meta_position;
|
size_t meta_size, meta_position;
|
||||||
char *meta_data;
|
char *meta_data;
|
||||||
|
|
||||||
Tag *tag;
|
std::unique_ptr<Tag> tag;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
~IcyMetaDataParser() noexcept {
|
~IcyMetaDataParser() noexcept {
|
||||||
@ -81,10 +83,8 @@ public:
|
|||||||
*/
|
*/
|
||||||
size_t ParseInPlace(void *data, size_t length) noexcept;
|
size_t ParseInPlace(void *data, size_t length) noexcept;
|
||||||
|
|
||||||
Tag *ReadTag() noexcept {
|
std::unique_ptr<Tag> ReadTag() noexcept {
|
||||||
Tag *result = tag;
|
return std::exchange(tag, nullptr);
|
||||||
tag = nullptr;
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -55,10 +55,10 @@ IcyInputStream::ReadTag()
|
|||||||
input_tag = new_input_tag;
|
input_tag = new_input_tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
Tag *new_icy_tag = parser.ReadTag();
|
auto new_icy_tag = parser.ReadTag();
|
||||||
if (new_icy_tag != nullptr) {
|
if (new_icy_tag != nullptr) {
|
||||||
delete icy_tag;
|
delete icy_tag;
|
||||||
icy_tag = new_icy_tag;
|
icy_tag = new_icy_tag.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (new_input_tag == nullptr && new_icy_tag == nullptr)
|
if (new_input_tag == nullptr && new_icy_tag == nullptr)
|
||||||
|
Loading…
Reference in New Issue
Block a user