summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-09-11 12:30:37 +0200
committerGitHub <noreply@github.com>2020-09-11 12:30:37 +0200
commit0aa542afda6ad9a07c1db760b9a9e3ca3f1b5f86 (patch)
tree1339f5e5b504b39fad57b5c39494280c24fc4cf2
parent0f843241edae8d31ea982e3e62b34d9367e28637 (diff)
parent75a017b8bda4e4658ed92bad16eb15810c18463d (diff)
Merge pull request #14379 from vespa-engine/balder/implement-move-constructor
Balder/implement move constructor
-rw-r--r--document/src/tests/fieldvalue/predicatefieldvalue_test.cpp13
-rw-r--r--document/src/vespa/document/fieldvalue/predicatefieldvalue.cpp20
-rw-r--r--document/src/vespa/document/fieldvalue/predicatefieldvalue.h6
3 files changed, 21 insertions, 18 deletions
diff --git a/document/src/tests/fieldvalue/predicatefieldvalue_test.cpp b/document/src/tests/fieldvalue/predicatefieldvalue_test.cpp
index 41df9f9967b..1a9f0993b9b 100644
--- a/document/src/tests/fieldvalue/predicatefieldvalue_test.cpp
+++ b/document/src/tests/fieldvalue/predicatefieldvalue_test.cpp
@@ -1,19 +1,16 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
// Unit tests for predicatefieldvalue.
-#include <vespa/log/log.h>
-LOG_SETUP("predicatefieldvalue_test");
-
-#include <vespa/document/predicate/predicate.h>
-#include <vespa/vespalib/data/slime/slime.h>
#include <vespa/vespalib/testkit/testapp.h>
#include <vespa/document/datatype/datatype.h>
#include <vespa/document/fieldvalue/predicatefieldvalue.h>
#include <vespa/document/predicate/predicate_slime_builder.h>
-#include <sstream>
#include <string>
+#include <vespa/log/log.h>
+LOG_SETUP("predicatefieldvalue_test");
+
using std::ostringstream;
using std::string;
using vespalib::Slime;
@@ -29,7 +26,7 @@ void verifyEqual(const FieldValue & a, const FieldValue & b) {
ASSERT_EQUAL(o1.str(), o2.str());
}
-TEST("require that PredicateFieldValue can be cloned, assigned, and operator=") {
+TEST("require that PredicateFieldValue can be cloned, assigned") {
PredicateSlimeBuilder builder;
builder.neg().feature("foo").value("bar").value("baz");
PredicateFieldValue val(builder.build());
@@ -42,7 +39,7 @@ TEST("require that PredicateFieldValue can be cloned, assigned, and operator=")
verifyEqual(val, assigned);
PredicateFieldValue operatorAssigned;
- operatorAssigned = val;
+ operatorAssigned = std::move(assigned);
verifyEqual(val, operatorAssigned);
}
diff --git a/document/src/vespa/document/fieldvalue/predicatefieldvalue.cpp b/document/src/vespa/document/fieldvalue/predicatefieldvalue.cpp
index 68331a50262..74660e17568 100644
--- a/document/src/vespa/document/fieldvalue/predicatefieldvalue.cpp
+++ b/document/src/vespa/document/fieldvalue/predicatefieldvalue.cpp
@@ -34,20 +34,21 @@ PredicateFieldValue::PredicateFieldValue(const PredicateFieldValue &rhs)
inject(rhs._slime->get(), SlimeInserter(*_slime));
}
-PredicateFieldValue::~PredicateFieldValue() { }
+PredicateFieldValue::~PredicateFieldValue() = default;
-FieldValue &PredicateFieldValue::assign(const FieldValue &rhs) {
+FieldValue &
+PredicateFieldValue::assign(const FieldValue &rhs) {
if (rhs.inherits(PredicateFieldValue::classId)) {
operator=(static_cast<const PredicateFieldValue &>(rhs));
- return *this;
} else {
_slime.reset();
_altered = true;
- return FieldValue::assign(rhs);
}
+ return *this;
}
-PredicateFieldValue &PredicateFieldValue::operator=(const PredicateFieldValue &rhs)
+PredicateFieldValue &
+PredicateFieldValue::operator=(const PredicateFieldValue &rhs)
{
_slime = std::make_unique<Slime>();
inject(rhs._slime->get(), SlimeInserter(*_slime));
@@ -55,18 +56,21 @@ PredicateFieldValue &PredicateFieldValue::operator=(const PredicateFieldValue &r
return *this;
}
-int PredicateFieldValue::compare(const FieldValue&rhs) const {
+int
+PredicateFieldValue::compare(const FieldValue&rhs) const {
int diff = FieldValue::compare(rhs);
if (diff != 0) return diff;
const PredicateFieldValue &o = static_cast<const PredicateFieldValue &>(rhs);
return Predicate::compare(*_slime, *o._slime);
}
-void PredicateFieldValue::printXml(XmlOutputStream& out) const {
+void
+PredicateFieldValue::printXml(XmlOutputStream& out) const {
out << XmlContent(PredicatePrinter::print(*_slime));
}
-void PredicateFieldValue::print(std::ostream& out, bool, const std::string&) const {
+void
+PredicateFieldValue::print(std::ostream& out, bool, const std::string&) const {
out << PredicatePrinter::print(*_slime) << "\n";
}
diff --git a/document/src/vespa/document/fieldvalue/predicatefieldvalue.h b/document/src/vespa/document/fieldvalue/predicatefieldvalue.h
index e0df3a38353..7154affc9b0 100644
--- a/document/src/vespa/document/fieldvalue/predicatefieldvalue.h
+++ b/document/src/vespa/document/fieldvalue/predicatefieldvalue.h
@@ -13,13 +13,15 @@ class PredicateFieldValue : public FieldValue {
std::unique_ptr<vespalib::Slime> _slime;
bool _altered;
+ PredicateFieldValue & operator=(const PredicateFieldValue &rhs);
public:
PredicateFieldValue();
PredicateFieldValue(std::unique_ptr<vespalib::Slime> s);
PredicateFieldValue(const PredicateFieldValue &rhs);
- ~PredicateFieldValue();
+ PredicateFieldValue(PredicateFieldValue && rhs) noexcept = default;
+ ~PredicateFieldValue() override;
- PredicateFieldValue &operator=(const PredicateFieldValue &rhs);
+ PredicateFieldValue & operator=(PredicateFieldValue && rhs) noexcept = default;
void accept(FieldValueVisitor &visitor) override { visitor.visit(*this); }
void accept(ConstFieldValueVisitor &visitor) const override { visitor.visit(*this); }