diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2020-09-11 12:30:37 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-11 12:30:37 +0200 |
commit | 0aa542afda6ad9a07c1db760b9a9e3ca3f1b5f86 (patch) | |
tree | 1339f5e5b504b39fad57b5c39494280c24fc4cf2 | |
parent | 0f843241edae8d31ea982e3e62b34d9367e28637 (diff) | |
parent | 75a017b8bda4e4658ed92bad16eb15810c18463d (diff) |
Merge pull request #14379 from vespa-engine/balder/implement-move-constructor
Balder/implement move constructor
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); } |