summaryrefslogtreecommitdiff
path: root/src/mongo/bson/bsonobjbuilder.h
diff options
context:
space:
mode:
authorGeert Bosch <bosch@gnat.com>2018-07-08 09:32:03 -0400
committerGeert Bosch <geert@mongodb.com>2018-08-03 17:58:45 -0400
commitce9968b484b95fe3f08ffe1d15791e8fadc9e854 (patch)
tree9a0acdac7c9de2d90c2df77db9d5e09fe4c7b436 /src/mongo/bson/bsonobjbuilder.h
parent17f64a621f5dc1431e663bdaa46208432f67c441 (diff)
downloadmongo-ce9968b484b95fe3f08ffe1d15791e8fadc9e854.tar.gz
SERVER-36108 speed up BSONArrayBuilder by counting in decimal
Diffstat (limited to 'src/mongo/bson/bsonobjbuilder.h')
-rw-r--r--src/mongo/bson/bsonobjbuilder.h70
1 files changed, 34 insertions, 36 deletions
diff --git a/src/mongo/bson/bsonobjbuilder.h b/src/mongo/bson/bsonobjbuilder.h
index 6162495c1cd..ef92065d9a0 100644
--- a/src/mongo/bson/bsonobjbuilder.h
+++ b/src/mongo/bson/bsonobjbuilder.h
@@ -48,7 +48,7 @@
#include "mongo/bson/util/builder.h"
#include "mongo/platform/decimal128.h"
#include "mongo/stdx/type_traits.h"
-#include "mongo/util/itoa.h"
+#include "mongo/util/decimal_counter.h"
namespace mongo {
@@ -810,20 +810,20 @@ private:
class BSONArrayBuilder {
public:
- BSONArrayBuilder() : _i(0), _b() {}
- BSONArrayBuilder(BufBuilder& _b) : _i(0), _b(_b) {}
- BSONArrayBuilder(int initialSize) : _i(0), _b(initialSize) {}
+ BSONArrayBuilder() {}
+ BSONArrayBuilder(BufBuilder& _b) : _b(_b) {}
+ BSONArrayBuilder(int initialSize) : _b(initialSize) {}
template <typename T>
BSONArrayBuilder& append(const T& x) {
- ItoA itoa(_i++);
- _b.append(itoa, x);
+ _b.append(_fieldCount, x);
+ ++_fieldCount;
return *this;
}
BSONArrayBuilder& append(const BSONElement& e) {
- ItoA itoa(_i++);
- _b.appendAs(e, itoa);
+ _b.appendAs(e, _fieldCount);
+ ++_fieldCount;
return *this;
}
@@ -833,19 +833,19 @@ public:
template <typename T>
BSONArrayBuilder& operator<<(const T& x) {
- ItoA itoa(_i++);
- _b << itoa << x;
+ _b << _fieldCount << x;
+ ++_fieldCount;
return *this;
}
void appendNull() {
- ItoA itoa(_i++);
- _b.appendNull(itoa);
+ _b.appendNull(_fieldCount);
+ ++_fieldCount;
}
void appendUndefined() {
- ItoA itoa(_i++);
- _b.appendUndefined(itoa);
+ _b.appendUndefined(_fieldCount);
+ ++_fieldCount;
}
/**
@@ -875,59 +875,57 @@ public:
// These two just use next position
BufBuilder& subobjStart() {
- ItoA itoa(_i++);
- return _b.subobjStart(itoa);
+ return _b.subobjStart(_fieldCount++);
}
BufBuilder& subarrayStart() {
- ItoA itoa(_i++);
- return _b.subarrayStart(itoa);
+ return _b.subarrayStart(_fieldCount++);
}
BSONArrayBuilder& appendRegex(StringData regex, StringData options = "") {
- ItoA itoa(_i++);
- _b.appendRegex(itoa, regex, options);
+ _b.appendRegex(_fieldCount, regex, options);
+ ++_fieldCount;
return *this;
}
BSONArrayBuilder& appendBinData(int len, BinDataType type, const void* data) {
- ItoA itoa(_i++);
- _b.appendBinData(itoa, len, type, data);
+ _b.appendBinData(_fieldCount, len, type, data);
+ ++_fieldCount;
return *this;
}
BSONArrayBuilder& appendCode(StringData code) {
- ItoA itoa(_i++);
- _b.appendCode(itoa, code);
+ _b.appendCode(_fieldCount, code);
+ ++_fieldCount;
return *this;
}
BSONArrayBuilder& appendCodeWScope(StringData code, const BSONObj& scope) {
- ItoA itoa(_i++);
- _b.appendCodeWScope(itoa, code, scope);
+ _b.appendCodeWScope(_fieldCount, code, scope);
+ ++_fieldCount;
return *this;
}
BSONArrayBuilder& appendTimeT(time_t dt) {
- ItoA itoa(_i++);
- _b.appendTimeT(itoa, dt);
+ _b.appendTimeT(_fieldCount, dt);
+ ++_fieldCount;
return *this;
}
BSONArrayBuilder& appendDate(Date_t dt) {
- ItoA itoa(_i++);
- _b.appendDate(itoa, dt);
+ _b.appendDate(_fieldCount, dt);
+ ++_fieldCount;
return *this;
}
BSONArrayBuilder& appendBool(bool val) {
- ItoA itoa(_i++);
- _b.appendBool(itoa, val);
+ _b.appendBool(_fieldCount, val);
+ ++_fieldCount;
return *this;
}
BSONArrayBuilder& appendTimestamp(unsigned long long ts) {
- ItoA itoa(_i++);
- _b.appendTimestamp(itoa, ts);
+ _b.appendTimestamp(_fieldCount, ts);
+ ++_fieldCount;
return *this;
}
@@ -939,7 +937,7 @@ public:
return _b.len();
}
int arrSize() const {
- return _i;
+ return _fieldCount;
}
BufBuilder& bb() {
@@ -947,7 +945,7 @@ public:
}
private:
- std::uint32_t _i;
+ DecimalCounter<uint32_t> _fieldCount;
BSONObjBuilder _b;
};