diff options
author | Mathias Stearn <mathias@10gen.com> | 2015-04-24 19:00:39 -0400 |
---|---|---|
committer | Mathias Stearn <mathias@10gen.com> | 2015-05-04 19:30:07 -0400 |
commit | a7cc663e53d907f3c5998748770793ade95bdaa1 (patch) | |
tree | f5878842d9a615390cdcdb97d7f2d0da94dfb48c /src | |
parent | 50922d9f626758855326f6b5a06e940269189e11 (diff) | |
download | mongo-a7cc663e53d907f3c5998748770793ade95bdaa1.tar.gz |
SERVER-18204 Remove Value::consume()
It was a temporary stopgap until we were on C++11 and could std::move vectors.
We now live in that world.
Diffstat (limited to 'src')
-rw-r--r-- | src/mongo/db/pipeline/accumulator_add_to_set.cpp | 3 | ||||
-rw-r--r-- | src/mongo/db/pipeline/dependencies.cpp | 2 | ||||
-rw-r--r-- | src/mongo/db/pipeline/document.h | 2 | ||||
-rw-r--r-- | src/mongo/db/pipeline/document_source_group.cpp | 4 | ||||
-rw-r--r-- | src/mongo/db/pipeline/document_source_match.cpp | 6 | ||||
-rw-r--r-- | src/mongo/db/pipeline/document_source_redact.cpp | 2 | ||||
-rw-r--r-- | src/mongo/db/pipeline/document_source_sort.cpp | 2 | ||||
-rw-r--r-- | src/mongo/db/pipeline/expression.cpp | 16 | ||||
-rw-r--r-- | src/mongo/db/pipeline/value.cpp | 2 | ||||
-rw-r--r-- | src/mongo/db/pipeline/value.h | 16 | ||||
-rw-r--r-- | src/mongo/db/pipeline/value_internal.h | 2 |
11 files changed, 22 insertions, 35 deletions
diff --git a/src/mongo/db/pipeline/accumulator_add_to_set.cpp b/src/mongo/db/pipeline/accumulator_add_to_set.cpp index a15ac08d831..bd151964ffa 100644 --- a/src/mongo/db/pipeline/accumulator_add_to_set.cpp +++ b/src/mongo/db/pipeline/accumulator_add_to_set.cpp @@ -64,8 +64,7 @@ namespace mongo { } Value AccumulatorAddToSet::getValue(bool toBeMerged) const { - vector<Value> valVec(set.begin(), set.end()); - return Value::consume(valVec); + return Value(vector<Value>(set.begin(), set.end())); } AccumulatorAddToSet::AccumulatorAddToSet() { diff --git a/src/mongo/db/pipeline/dependencies.cpp b/src/mongo/db/pipeline/dependencies.cpp index dc28ee18ebd..128d46bd703 100644 --- a/src/mongo/db/pipeline/dependencies.cpp +++ b/src/mongo/db/pipeline/dependencies.cpp @@ -136,7 +136,7 @@ namespace { } } - return Value::consume(values); + return Value(std::move(values)); } // Handles object-typed values including the top-level for ParsedDeps::extractFields diff --git a/src/mongo/db/pipeline/document.h b/src/mongo/db/pipeline/document.h index d86bd870e91..10d03ae8d2d 100644 --- a/src/mongo/db/pipeline/document.h +++ b/src/mongo/db/pipeline/document.h @@ -541,7 +541,7 @@ namespace mongo { return *this << Value(val); } - Value done() { return Value::consume(_array); } + Value done() { return Value(std::move(_array)); } private: std::vector<Value> _array; diff --git a/src/mongo/db/pipeline/document_source_group.cpp b/src/mongo/db/pipeline/document_source_group.cpp index 94268d6f401..c4cdbd830dd 100644 --- a/src/mongo/db/pipeline/document_source_group.cpp +++ b/src/mongo/db/pipeline/document_source_group.cpp @@ -492,7 +492,7 @@ namespace mongo { for (size_t j=0; j < ptrs[i]->second.size(); j++) { accums.push_back(ptrs[i]->second[j]->getValue(/*toBeMerged=*/true)); } - writer.addAlreadySorted(ptrs[i]->first, Value::consume(accums)); + writer.addAlreadySorted(ptrs[i]->first, Value(std::move(accums))); } break; } @@ -547,7 +547,7 @@ namespace mongo { for (size_t i = 0; i < _idExpressions.size(); i++) { vals.push_back(_idExpressions[i]->evaluate(vars)); } - return Value::consume(vals); + return Value(std::move(vals)); } Value DocumentSourceGroup::expandId(const Value& val) { diff --git a/src/mongo/db/pipeline/document_source_match.cpp b/src/mongo/db/pipeline/document_source_match.cpp index 97238d491b4..ab2784acb97 100644 --- a/src/mongo/db/pipeline/document_source_match.cpp +++ b/src/mongo/db/pipeline/document_source_match.cpp @@ -193,7 +193,7 @@ namespace { } } if (!matches.empty()) - output[field.fieldNameStringData()] = Value::consume(matches); + output[field.fieldNameStringData()] = Value(std::move(matches)); break; } @@ -249,7 +249,7 @@ namespace { } if (!okClauses.empty()) - output["$or"] = Value::consume(okClauses); + output["$or"] = Value(std::move(okClauses)); } else if (str::equals(field.fieldName(), "$and")) { // $and can include subset of elements (like $all). @@ -260,7 +260,7 @@ namespace { okClauses.push_back(Value(clause)); } if (!okClauses.empty()) - output["$and"] = Value::consume(okClauses); + output["$and"] = Value(std::move(okClauses)); } continue; diff --git a/src/mongo/db/pipeline/document_source_redact.cpp b/src/mongo/db/pipeline/document_source_redact.cpp index 9447a9e4fa2..e83a1583b9f 100644 --- a/src/mongo/db/pipeline/document_source_redact.cpp +++ b/src/mongo/db/pipeline/document_source_redact.cpp @@ -97,7 +97,7 @@ namespace mongo { newArr.push_back(arr[i]); } } - return Value::consume(newArr); + return Value(std::move(newArr)); } else { return in; diff --git a/src/mongo/db/pipeline/document_source_sort.cpp b/src/mongo/db/pipeline/document_source_sort.cpp index 9768a44b84d..95abf93400b 100644 --- a/src/mongo/db/pipeline/document_source_sort.cpp +++ b/src/mongo/db/pipeline/document_source_sort.cpp @@ -311,7 +311,7 @@ namespace mongo { for (size_t i=0; i < vSortKey.size(); i++) { keys.push_back(vSortKey[i]->evaluate(&vars)); } - return Value::consume(keys); + return Value(std::move(keys)); } int DocumentSourceSort::compare(const Value& lhs, const Value& rhs) const { diff --git a/src/mongo/db/pipeline/expression.cpp b/src/mongo/db/pipeline/expression.cpp index 8ea1f6b0b9a..4da7eb65e01 100644 --- a/src/mongo/db/pipeline/expression.cpp +++ b/src/mongo/db/pipeline/expression.cpp @@ -1213,7 +1213,7 @@ namespace { result.push_back(doc.freezeToValue()); } - out.addField(field.first, Value::consume(result)); + out.addField(field.first, Value(std::move(result))); } else { verify( false ); @@ -1421,7 +1421,7 @@ namespace { result.push_back(nested); } - return Value::consume(result); + return Value(std::move(result)); } Value ExpressionFieldPath::evaluatePath(size_t index, const Document& input) const { // Note this function is very hot so it is important that is is well optimized. @@ -1681,7 +1681,7 @@ namespace { output.push_back(toInsert); } - return Value::consume(output); + return Value(std::move(output)); } void ExpressionMap::addDependencies(DepsTracker* deps, vector<string>* path) const { @@ -2120,7 +2120,7 @@ namespace { returnVec.push_back(*it); } } - return Value::consume(returnVec); + return Value(std::move(returnVec)); } REGISTER_EXPRESSION("$setDifference", ExpressionSetDifference::parse); @@ -2206,9 +2206,8 @@ namespace { break; } } - vector<Value> result = vector<Value>(currentIntersection.begin(), - currentIntersection.end()); - return Value::consume(result); + return Value(vector<Value>(currentIntersection.begin(), + currentIntersection.end())); } REGISTER_EXPRESSION("$setIntersection", ExpressionSetIntersection::parse); @@ -2315,8 +2314,7 @@ namespace { unionedSet.insert(newEntries.getArray().begin(), newEntries.getArray().end()); } - vector<Value> result = vector<Value>(unionedSet.begin(), unionedSet.end()); - return Value::consume(result); + return Value(vector<Value>(unionedSet.begin(), unionedSet.end())); } REGISTER_EXPRESSION("$setUnion", ExpressionSetUnion::parse); diff --git a/src/mongo/db/pipeline/value.cpp b/src/mongo/db/pipeline/value.cpp index 8ef22166e84..b156d290613 100644 --- a/src/mongo/db/pipeline/value.cpp +++ b/src/mongo/db/pipeline/value.cpp @@ -1066,7 +1066,7 @@ namespace mongo { array.reserve(numElems); for (int i = 0; i < numElems; i++) array.push_back(deserializeForSorter(buf, settings)); - return Value::consume(array); + return Value(std::move(array)); } } verify(false); diff --git a/src/mongo/db/pipeline/value.h b/src/mongo/db/pipeline/value.h index 4e30c30564d..c79a02ec972 100644 --- a/src/mongo/db/pipeline/value.h +++ b/src/mongo/db/pipeline/value.h @@ -74,13 +74,13 @@ namespace mongo { explicit Value(double value) : _storage(NumberDouble, value) {} explicit Value(const Timestamp& value) : _storage(bsonTimestamp, value) {} explicit Value(const OID& value) : _storage(jstOID, value) {} - explicit Value(StringData value) : _storage(String, value) {} - explicit Value(const std::string& value) : _storage(String, StringData(value)) {} + explicit Value(StringData value) : _storage(String, value) {} + explicit Value(const std::string& value) : _storage(String, StringData(value)) {} explicit Value(const char* value) : _storage(String, StringData(value)) {} explicit Value(const Document& doc) : _storage(Object, doc) {} explicit Value(const BSONObj& obj); explicit Value(const BSONArray& arr); - explicit Value(const std::vector<Value>& vec) : _storage(Array, new RCVector(vec)) {} + explicit Value(std::vector<Value> vec) : _storage(Array, new RCVector(std::move(vec))) {} explicit Value(const BSONBinData& bd) : _storage(BinData, bd) {} explicit Value(const BSONRegEx& re) : _storage(RegEx, re) {} explicit Value(const BSONCodeWScope& cws) : _storage(CodeWScope, cws) {} @@ -107,16 +107,6 @@ namespace mongo { */ static Value createIntOrLong(long long value); - /** Construct an Array-typed Value from consumed without copying the vector. - * consumed is replaced with an empty vector. - * In C++11 this would be spelled Value(std::move(consumed)). - */ - static Value consume(std::vector<Value>& consumed) { - RCVector* vec = new RCVector(); - std::swap(vec->vec, consumed); - return Value(ValueStorage(Array, vec)); - } - /** A "missing" value indicates the lack of a Value. * This is similar to undefined/null but should not appear in output to BSON. * Missing Values are returned by Document when accessing non-existent fields. diff --git a/src/mongo/db/pipeline/value_internal.h b/src/mongo/db/pipeline/value_internal.h index 834c2e7d1d6..6cb31c8f635 100644 --- a/src/mongo/db/pipeline/value_internal.h +++ b/src/mongo/db/pipeline/value_internal.h @@ -50,7 +50,7 @@ namespace mongo { class RCVector : public RefCountable { public: RCVector() {} - RCVector(const std::vector<Value>& v) :vec(v) {} + RCVector(std::vector<Value> v) :vec(std::move(v)) {} std::vector<Value> vec; }; |