diff options
author | Max Kellermann <max@duempel.org> | 2013-12-03 12:56:36 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2013-12-03 12:59:55 +0100 |
commit | 9f4e96fdfa0967fa83444a44c8e6fdbda14b96c3 (patch) | |
tree | 2f08a42a9c2f70160e892314dbeaf3bf559a8203 /src/tag/TagBuilder.cxx | |
parent | c36af357303891a45fdcb286b99ca8bb5be20693 (diff) | |
download | mpd-9f4e96fdfa0967fa83444a44c8e6fdbda14b96c3.tar.gz mpd-9f4e96fdfa0967fa83444a44c8e6fdbda14b96c3.tar.xz mpd-9f4e96fdfa0967fa83444a44c8e6fdbda14b96c3.zip |
PaylistTag: use class TagBuilder
Diffstat (limited to 'src/tag/TagBuilder.cxx')
-rw-r--r-- | src/tag/TagBuilder.cxx | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/src/tag/TagBuilder.cxx b/src/tag/TagBuilder.cxx index 2d3b49eb5..5c7da2a1a 100644 --- a/src/tag/TagBuilder.cxx +++ b/src/tag/TagBuilder.cxx @@ -108,13 +108,7 @@ TagBuilder::Clear() { time = -1; has_playlist = false; - - tag_pool_lock.lock(); - for (auto i : items) - tag_pool_put_item(i); - tag_pool_lock.unlock(); - - items.clear(); + RemoveAll(); } void @@ -216,3 +210,29 @@ TagBuilder::AddItem(TagType type, const char *value) AddItem(type, value, strlen(value)); } + +void +TagBuilder::RemoveAll() +{ + tag_pool_lock.lock(); + for (auto i : items) + tag_pool_put_item(i); + tag_pool_lock.unlock(); + + items.clear(); +} + +void +TagBuilder::RemoveType(TagType type) +{ + const auto begin = items.begin(), end = items.end(); + + items.erase(std::remove_if(begin, end, + [type](TagItem *item) { + if (item->type != type) + return false; + tag_pool_put_item(item); + return true; + }), + end); +} |