summaryrefslogtreecommitdiff
path: root/src/mongo/bson/bsonobjbuilder.h
diff options
context:
space:
mode:
authorAdam Midvidy <amidvidy@gmail.com>2015-11-18 12:08:06 -0500
committerAdam Midvidy <amidvidy@gmail.com>2015-11-18 15:10:50 -0500
commitf59b2b7634b1c4c84e3f8f096a4e895986bf4d30 (patch)
tree7e59d9036edeffbb4caa583e9893c76d47d5f486 /src/mongo/bson/bsonobjbuilder.h
parentb097fd8b0740e903ef4bbb54ea1a8078be449c36 (diff)
downloadmongo-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.h51
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;
};