summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathias Stearn <mathias@10gen.com>2013-12-16 16:08:29 -0500
committerDan Pasette <dan@mongodb.com>2014-03-09 11:27:35 -0400
commitac5d61ca615f5028c32204f69bfd8aca7dbb152b (patch)
tree6b58e755629810a1acb984cd7b6dead23e4d4b6c
parenta7d9059a07c1be3043dae0dcfbabfa0e5a908f9e (diff)
downloadmongo-ac5d61ca615f5028c32204f69bfd8aca7dbb152b.tar.gz
SERVER-12132 Stop using stringstream in Value::coerceToString()
This speeds up the function by two changes: 1) Using StringBuilder (through str::stream) rather than stringstream. 2) Not constructing a StringBuilder or stringstream when not needed. At least with libstdc++, constructing and destructing a stringstream is extremely expensive.
-rw-r--r--src/mongo/db/pipeline/value.cpp13
1 files changed, 4 insertions, 9 deletions
diff --git a/src/mongo/db/pipeline/value.cpp b/src/mongo/db/pipeline/value.cpp
index 207dc4e37b8..6045207c764 100644
--- a/src/mongo/db/pipeline/value.cpp
+++ b/src/mongo/db/pipeline/value.cpp
@@ -513,19 +513,15 @@ namespace mongo {
}
string Value::coerceToString() const {
- stringstream ss;
switch(getType()) {
case NumberDouble:
- ss << _storage.doubleValue;
- return ss.str();
+ return str::stream() << _storage.doubleValue;
case NumberInt:
- ss << _storage.intValue;
- return ss.str();
+ return str::stream() << _storage.intValue;
case NumberLong:
- ss << _storage.longValue;
- return ss.str();
+ return str::stream() << _storage.longValue;
case Code:
case Symbol:
@@ -533,8 +529,7 @@ namespace mongo {
return getStringData().toString();
case Timestamp:
- ss << getTimestamp().toStringPretty();
- return ss.str();
+ return getTimestamp().toStringPretty();
case Date:
return tmToISODateString(coerceToTm());