summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/value.cpp
diff options
context:
space:
mode:
authorMathias Stearn <mathias@10gen.com>2013-12-16 16:08:29 -0500
committerMathias Stearn <mathias@10gen.com>2013-12-18 19:09:17 -0500
commitedc9da17c4abd325a85134fe5551effe8ee58977 (patch)
treee3ca2beec45a5d1358905cf4fbc86f9c9cf9bbf3 /src/mongo/db/pipeline/value.cpp
parent0ec3c8d281bf634aba07b73f1ff88aa68ec46a6a (diff)
downloadmongo-edc9da17c4abd325a85134fe5551effe8ee58977.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.
Diffstat (limited to 'src/mongo/db/pipeline/value.cpp')
-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 9139f0cdbed..4b91603ce18 100644
--- a/src/mongo/db/pipeline/value.cpp
+++ b/src/mongo/db/pipeline/value.cpp
@@ -477,19 +477,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:
@@ -497,8 +493,7 @@ namespace mongo {
return getStringData().toString();
case Timestamp:
- ss << getTimestamp().toStringPretty();
- return ss.str();
+ return getTimestamp().toStringPretty();
case Date:
return tmToISODateString(coerceToTm());