aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/tag/TagBuilder.cxx17
-rw-r--r--src/tag/TagBuilder.hxx3
2 files changed, 19 insertions, 1 deletions
diff --git a/src/tag/TagBuilder.cxx b/src/tag/TagBuilder.cxx
index 6ba8c12db..b114e882b 100644
--- a/src/tag/TagBuilder.cxx
+++ b/src/tag/TagBuilder.cxx
@@ -54,6 +54,23 @@ TagBuilder::TagBuilder(Tag &&other)
other.items = nullptr;
}
+TagBuilder &
+TagBuilder::operator=(const TagBuilder &other)
+{
+ /* copy all attributes */
+ time = other.time;
+ has_playlist = other.has_playlist;
+ items = other.items;
+
+ /* increment the tag pool refcounters */
+ tag_pool_lock.lock();
+ for (auto i : items)
+ tag_pool_dup_item(i);
+ tag_pool_lock.unlock();
+
+ return *this;
+}
+
void
TagBuilder::Clear()
{
diff --git a/src/tag/TagBuilder.hxx b/src/tag/TagBuilder.hxx
index 52ccf466c..f21b818bb 100644
--- a/src/tag/TagBuilder.hxx
+++ b/src/tag/TagBuilder.hxx
@@ -63,11 +63,12 @@ public:
}
TagBuilder(const TagBuilder &other) = delete;
- TagBuilder &operator=(const TagBuilder &other) = delete;
TagBuilder(const Tag &other);
TagBuilder(Tag &&other);
+ TagBuilder &operator=(const TagBuilder &other);
+
/**
* Returns true if the tag contains no items. This ignores the "time"
* attribute.