Merge tag 'v0.19.9'
This commit is contained in:
@@ -25,6 +25,8 @@
|
||||
#include "Tag.hxx"
|
||||
#include "util/WritableBuffer.hxx"
|
||||
|
||||
#include <array>
|
||||
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
@@ -168,12 +170,19 @@ TagBuilder::Complement(const Tag &other)
|
||||
|
||||
has_playlist |= other.has_playlist;
|
||||
|
||||
/* build a table of tag types that were already present in
|
||||
this object, which will not be copied from #other */
|
||||
std::array<bool, TAG_NUM_OF_ITEM_TYPES> present;
|
||||
present.fill(false);
|
||||
for (const TagItem *i : items)
|
||||
present[i->type] = true;
|
||||
|
||||
items.reserve(items.size() + other.num_items);
|
||||
|
||||
tag_pool_lock.lock();
|
||||
for (unsigned i = 0, n = other.num_items; i != n; ++i) {
|
||||
TagItem *item = other.items[i];
|
||||
if (!HasType(item->type))
|
||||
if (!present[item->type])
|
||||
items.push_back(tag_pool_dup_item(item));
|
||||
}
|
||||
tag_pool_lock.unlock();
|
||||
|
Reference in New Issue
Block a user