diff options
-rw-r--r-- | src/mongo/bson/bsonobjbuilder.h | 10 | ||||
-rw-r--r-- | src/mongo/bson/util/builder.h | 9 | ||||
-rw-r--r-- | src/mongo/db/namespace_string.cpp | 5 | ||||
-rw-r--r-- | src/mongo/db/pipeline/document_source_out.cpp | 4 | ||||
-rw-r--r-- | src/mongo/util/mongoutils/str.h | 4 |
5 files changed, 20 insertions, 12 deletions
diff --git a/src/mongo/bson/bsonobjbuilder.h b/src/mongo/bson/bsonobjbuilder.h index 224deb1ee6d..72fd2d901af 100644 --- a/src/mongo/bson/bsonobjbuilder.h +++ b/src/mongo/bson/bsonobjbuilder.h @@ -428,7 +428,7 @@ public: return appendCode(fieldName, code.code); } - /** Append a std::string element. + /** Append a string element. @param sz size includes terminating null character */ BSONObjBuilder& append(StringData fieldName, const char* str, int sz) { _b.appendNum((char)String); @@ -437,15 +437,11 @@ public: _b.appendBuf(str, sz); return *this; } - /** Append a std::string element */ + /** Append a string element */ BSONObjBuilder& append(StringData fieldName, const char* str) { return append(fieldName, str, (int)strlen(str) + 1); } - /** Append a std::string element */ - BSONObjBuilder& append(StringData fieldName, const std::string& str) { - return append(fieldName, str.c_str(), (int)str.size() + 1); - } - /** Append a std::string element */ + /** Append a string element */ BSONObjBuilder& append(StringData fieldName, StringData str) { _b.appendNum((char)String); _b.appendStr(fieldName); diff --git a/src/mongo/bson/util/builder.h b/src/mongo/bson/util/builder.h index e6d29ceb175..258e63cf52d 100644 --- a/src/mongo/bson/util/builder.h +++ b/src/mongo/bson/util/builder.h @@ -446,6 +446,15 @@ public: return std::string(_buf.buf(), _buf.l); } + /** + * Returns a view of this string without copying. + * + * WARNING: the view expires when this StringBuilder is modified or destroyed. + */ + StringData stringData() const { + return StringData(_buf.buf(), _buf.l); + } + /** size of current std::string */ int len() const { return _buf.l; diff --git a/src/mongo/db/namespace_string.cpp b/src/mongo/db/namespace_string.cpp index 1128552ca67..95d600fb27b 100644 --- a/src/mongo/db/namespace_string.cpp +++ b/src/mongo/db/namespace_string.cpp @@ -117,15 +117,14 @@ bool NamespaceString::isListIndexesCursorNS() const { } NamespaceString NamespaceString::makeListCollectionsNSS(StringData dbName) { - NamespaceString nss(dbName, StringData(str::stream() << listCollectionsCursorCol)); + NamespaceString nss(dbName, listCollectionsCursorCol); dassert(nss.isValid()); dassert(nss.isListCollectionsCursorNS()); return nss; } NamespaceString NamespaceString::makeListIndexesNSS(StringData dbName, StringData collectionName) { - NamespaceString nss(dbName, - StringData(str::stream() << listIndexesCursorNSPrefix << collectionName)); + NamespaceString nss(dbName, str::stream() << listIndexesCursorNSPrefix << collectionName); dassert(nss.isValid()); dassert(nss.isListIndexesCursorNS()); return nss; diff --git a/src/mongo/db/pipeline/document_source_out.cpp b/src/mongo/db/pipeline/document_source_out.cpp index 4bfc5e14247..b4ff0aa19bc 100644 --- a/src/mongo/db/pipeline/document_source_out.cpp +++ b/src/mongo/db/pipeline/document_source_out.cpp @@ -131,8 +131,8 @@ boost::optional<Document> DocumentSourceOut::getNext() { // We will write all results into a temporary collection, then rename the temporary collection // to be the target collection once we are done. - _tempNs = NamespaceString(StringData(str::stream() << _outputNs.db() << ".tmp.agg_out." - << aggOutCounter.addAndFetch(1))); + _tempNs = NamespaceString(str::stream() << _outputNs.db() << ".tmp.agg_out." + << aggOutCounter.addAndFetch(1)); auto renameCommandObj = BSON("renameCollection" << _tempNs.ns() << "to" << _outputNs.ns() << "dropTarget" << true); diff --git a/src/mongo/util/mongoutils/str.h b/src/mongo/util/mongoutils/str.h index 2aefea6f261..c1967003506 100644 --- a/src/mongo/util/mongoutils/str.h +++ b/src/mongo/util/mongoutils/str.h @@ -39,6 +39,7 @@ #include <sstream> #include <string> +#include "mongo/base/string_data.h" #include "mongo/bson/util/builder.h" namespace mongoutils { @@ -64,6 +65,9 @@ public: operator std::string() const { return ss.str(); } + operator mongo::StringData() const { + return ss.stringData(); + } }; inline bool startsWith(const char* str, const char* prefix) { |