diff options
author | Adam Midvidy <amidvidy@gmail.com> | 2015-11-18 12:08:06 -0500 |
---|---|---|
committer | Adam Midvidy <amidvidy@gmail.com> | 2015-11-18 15:10:50 -0500 |
commit | f59b2b7634b1c4c84e3f8f096a4e895986bf4d30 (patch) | |
tree | 7e59d9036edeffbb4caa583e9893c76d47d5f486 /src/mongo/bson/bsonobjbuilder.h | |
parent | b097fd8b0740e903ef4bbb54ea1a8078be449c36 (diff) | |
download | mongo-f59b2b7634b1c4c84e3f8f096a4e895986bf4d30.tar.gz |
SERVER-21481 optimize generating indices in BSONArrayBuilder
Diffstat (limited to 'src/mongo/bson/bsonobjbuilder.h')
-rw-r--r-- | src/mongo/bson/bsonobjbuilder.h | 51 |
1 files changed, 32 insertions, 19 deletions
diff --git a/src/mongo/bson/bsonobjbuilder.h b/src/mongo/bson/bsonobjbuilder.h index ed21c7b63e1..a3bf857095f 100644 --- a/src/mongo/bson/bsonobjbuilder.h +++ b/src/mongo/bson/bsonobjbuilder.h @@ -45,6 +45,7 @@ #include "mongo/bson/bsonmisc.h" #include "mongo/bson/bsonobj.h" #include "mongo/platform/decimal128.h" +#include "mongo/util/itoa.h" namespace mongo { @@ -776,12 +777,14 @@ public: template <typename T> BSONArrayBuilder& append(const T& x) { - _b.append(num(), x); + ItoA itoa(_i++); + _b.append(itoa, x); return *this; } BSONArrayBuilder& append(const BSONElement& e) { - _b.appendAs(e, num()); + ItoA itoa(_i++); + _b.appendAs(e, itoa); return *this; } @@ -791,16 +794,19 @@ public: template <typename T> BSONArrayBuilder& operator<<(const T& x) { - _b << num().c_str() << x; + ItoA itoa(_i++); + _b << itoa << x; return *this; } void appendNull() { - _b.appendNull(num()); + ItoA itoa(_i++); + _b.appendNull(itoa); } void appendUndefined() { - _b.appendUndefined(num()); + ItoA itoa(_i++); + _b.appendUndefined(itoa); } /** @@ -830,49 +836,59 @@ public: // These two just use next position BufBuilder& subobjStart() { - return _b.subobjStart(num()); + ItoA itoa(_i++); + return _b.subobjStart(itoa); } BufBuilder& subarrayStart() { - return _b.subarrayStart(num()); + ItoA itoa(_i++); + return _b.subarrayStart(itoa); } BSONArrayBuilder& appendRegex(StringData regex, StringData options = "") { - _b.appendRegex(num(), regex, options); + ItoA itoa(_i++); + _b.appendRegex(itoa, regex, options); return *this; } BSONArrayBuilder& appendBinData(int len, BinDataType type, const void* data) { - _b.appendBinData(num(), len, type, data); + ItoA itoa(_i++); + _b.appendBinData(itoa, len, type, data); return *this; } BSONArrayBuilder& appendCode(StringData code) { - _b.appendCode(num(), code); + ItoA itoa(_i++); + _b.appendCode(itoa, code); return *this; } BSONArrayBuilder& appendCodeWScope(StringData code, const BSONObj& scope) { - _b.appendCodeWScope(num(), code, scope); + ItoA itoa(_i++); + _b.appendCodeWScope(itoa, code, scope); return *this; } BSONArrayBuilder& appendTimeT(time_t dt) { - _b.appendTimeT(num(), dt); + ItoA itoa(_i++); + _b.appendTimeT(itoa, dt); return *this; } BSONArrayBuilder& appendDate(Date_t dt) { - _b.appendDate(num(), dt); + ItoA itoa(_i++); + _b.appendDate(itoa, dt); return *this; } BSONArrayBuilder& appendBool(bool val) { - _b.appendBool(num(), val); + ItoA itoa(_i++); + _b.appendBool(itoa, val); return *this; } BSONArrayBuilder& appendTimestamp(unsigned long long ts) { - _b.appendTimestamp(num(), ts); + ItoA itoa(_i++); + _b.appendTimestamp(itoa, ts); return *this; } @@ -892,10 +908,7 @@ public: } private: - std::string num() { - return _b.numStr(_i++); - } - int _i; + std::uint32_t _i; BSONObjBuilder _b; }; |