diff options
author | Mathias Stearn <mathias@10gen.com> | 2013-12-16 16:08:29 -0500 |
---|---|---|
committer | Dan Pasette <dan@mongodb.com> | 2014-03-09 11:27:35 -0400 |
commit | ac5d61ca615f5028c32204f69bfd8aca7dbb152b (patch) | |
tree | 6b58e755629810a1acb984cd7b6dead23e4d4b6c | |
parent | a7d9059a07c1be3043dae0dcfbabfa0e5a908f9e (diff) | |
download | mongo-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.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 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()); |