diff options
author | Mathias Stearn <mathias@10gen.com> | 2013-12-16 16:08:29 -0500 |
---|---|---|
committer | Mathias Stearn <mathias@10gen.com> | 2013-12-18 19:09:17 -0500 |
commit | edc9da17c4abd325a85134fe5551effe8ee58977 (patch) | |
tree | e3ca2beec45a5d1358905cf4fbc86f9c9cf9bbf3 /src/mongo/db/pipeline/value.cpp | |
parent | 0ec3c8d281bf634aba07b73f1ff88aa68ec46a6a (diff) | |
download | mongo-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.cpp | 13 |
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()); |