PaylistTag: use class TagBuilder
This commit is contained in:
@@ -187,23 +187,3 @@ Tag::AddItem(TagType type, const char *value)
|
||||
{
|
||||
AddItem(type, value, strlen(value));
|
||||
}
|
||||
|
||||
void
|
||||
Tag::RemoveType(TagType type)
|
||||
{
|
||||
auto dest = items, src = items, end = items + num_items;
|
||||
|
||||
tag_pool_lock.lock();
|
||||
while (src != end) {
|
||||
TagItem *item = *src++;
|
||||
if (item->type == type)
|
||||
/* remove it */
|
||||
tag_pool_put_item(item);
|
||||
else
|
||||
/* keep it */
|
||||
*dest++ = item;
|
||||
}
|
||||
tag_pool_lock.unlock();
|
||||
|
||||
num_items = dest - items;
|
||||
}
|
||||
|
@@ -121,18 +121,6 @@ struct Tag {
|
||||
*/
|
||||
void AddItem(TagType type, const char *value);
|
||||
|
||||
/**
|
||||
* Removes all tag items.
|
||||
*/
|
||||
void RemoveAll() {
|
||||
num_items = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes all tag items of the specified type.
|
||||
*/
|
||||
void RemoveType(TagType type);
|
||||
|
||||
/**
|
||||
* Merges the data from two tags. If both tags share data for the
|
||||
* same TagType, only data from "add" is used.
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -147,6 +147,16 @@ public:
|
||||
gcc_nonnull_all
|
||||
void AddItem(TagType type, const char *value);
|
||||
|
||||
/**
|
||||
* Removes all tag items.
|
||||
*/
|
||||
void RemoveAll();
|
||||
|
||||
/**
|
||||
* Removes all tag items of the specified type.
|
||||
*/
|
||||
void RemoveType(TagType type);
|
||||
|
||||
private:
|
||||
gcc_nonnull_all
|
||||
void AddItemInternal(TagType type, const char *value, size_t length);
|
||||
|
Reference in New Issue
Block a user