summaryrefslogtreecommitdiff
path: root/src/mongo/bson
diff options
context:
space:
mode:
authorBilly Donahue <billy.donahue@mongodb.com>2019-07-04 17:57:25 -0400
committerBilly Donahue <billy.donahue@mongodb.com>2019-07-09 14:32:01 -0400
commitf2bb23436a46afacfc8e3dc65fda743fafe6b2c3 (patch)
tree990d9667db82f124bde3392c0240220a3707cbe1 /src/mongo/bson
parenta7cb58fe04b1a13909e98829a9235eb4fa837e8c (diff)
downloadmongo-f2bb23436a46afacfc8e3dc65fda743fafe6b2c3.tar.gz
SERVER-42034 remove BSONObjBuilder::numStr
Callers are better with either DecimalCounter or std::to_string.
Diffstat (limited to 'src/mongo/bson')
-rw-r--r--src/mongo/bson/bsonobjbuilder.cpp17
-rw-r--r--src/mongo/bson/bsonobjbuilder.h26
-rw-r--r--src/mongo/bson/json.cpp9
3 files changed, 15 insertions, 37 deletions
diff --git a/src/mongo/bson/bsonobjbuilder.cpp b/src/mongo/bson/bsonobjbuilder.cpp
index 871dcdfb1c0..e2d56cb540e 100644
--- a/src/mongo/bson/bsonobjbuilder.cpp
+++ b/src/mongo/bson/bsonobjbuilder.cpp
@@ -238,23 +238,6 @@ BSONObjBuilder::~BSONObjBuilder() {
}
}
-
-const string BSONObjBuilder::numStrs[] = {
- "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14",
- "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29",
- "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44",
- "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59",
- "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74",
- "75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89",
- "90", "91", "92", "93", "94", "95", "96", "97", "98", "99",
-};
-
-// This is to ensure that BSONObjBuilder doesn't try to use numStrs before the strings have
-// been constructed I've tested just making numStrs a char[][], but the overhead of
-// constructing the strings each time was too high numStrsReady will be 0 until after
-// numStrs is initialized because it is a static variable
-bool BSONObjBuilder::numStrsReady = (numStrs[0].size() > 0);
-
template <typename Alloc>
void _BufBuilder<Alloc>::grow_reallocate(int minSize) {
if (minSize > BufferMaxSize) {
diff --git a/src/mongo/bson/bsonobjbuilder.h b/src/mongo/bson/bsonobjbuilder.h
index 083d7580998..edd3c04ed77 100644
--- a/src/mongo/bson/bsonobjbuilder.h
+++ b/src/mongo/bson/bsonobjbuilder.h
@@ -674,14 +674,6 @@ public:
_doneCalled = true;
}
- static std::string numStr(int i) {
- if (i >= 0 && i < 100 && numStrsReady)
- return numStrs[i];
- StringBuilder o;
- o << i;
- return o.str();
- }
-
/** Stream oriented way to add field names and values. */
BSONObjBuilderValueStream& operator<<(StringData name) {
_s.endField(name);
@@ -765,9 +757,6 @@ private:
BSONObjBuilderValueStream _s;
BSONSizeTracker* _tracker;
bool _doneCalled;
-
- static const std::string numStrs[100]; // cache of 0 to 99 inclusive
- static bool numStrsReady; // for static init safety
};
class BSONArrayBuilder {
@@ -916,17 +905,22 @@ private:
template <class T>
inline BSONObjBuilder& BSONObjBuilder::append(StringData fieldName, const std::vector<T>& vals) {
BSONObjBuilder arrBuilder(subarrayStart(fieldName));
- for (unsigned int i = 0; i < vals.size(); ++i)
- arrBuilder.append(numStr(i), vals[i]);
+ DecimalCounter<size_t> n;
+ for (unsigned int i = 0; i < vals.size(); ++i) {
+ arrBuilder.append(StringData{n}, vals[i]);
+ ++n;
+ }
return *this;
}
template <class L>
inline BSONObjBuilder& _appendIt(BSONObjBuilder& _this, StringData fieldName, const L& vals) {
BSONObjBuilder arrBuilder;
- int n = 0;
- for (typename L::const_iterator i = vals.begin(); i != vals.end(); i++)
- arrBuilder.append(BSONObjBuilder::numStr(n++), *i);
+ DecimalCounter<size_t> n;
+ for (typename L::const_iterator i = vals.begin(); i != vals.end(); i++) {
+ arrBuilder.append(StringData{n}, *i);
+ ++n;
+ }
_this.appendArray(fieldName, arrBuilder.done());
return _this;
}
diff --git a/src/mongo/bson/json.cpp b/src/mongo/bson/json.cpp
index 91a6fcf2cd8..5d4acb31b01 100644
--- a/src/mongo/bson/json.cpp
+++ b/src/mongo/bson/json.cpp
@@ -39,6 +39,7 @@
#include "mongo/platform/decimal128.h"
#include "mongo/platform/strtoll.h"
#include "mongo/util/base64.h"
+#include "mongo/util/decimal_counter.h"
#include "mongo/util/hex.h"
#include "mongo/util/log.h"
#include "mongo/util/str.h"
@@ -690,7 +691,6 @@ Status JParse::maxKeyObject(StringData fieldName, BSONObjBuilder& builder) {
Status JParse::array(StringData fieldName, BSONObjBuilder& builder, bool subObject) {
MONGO_JSON_DEBUG("fieldName: " << fieldName);
- uint32_t index(0);
if (!readToken(LBRACKET)) {
return parseError("Expecting '['");
}
@@ -703,12 +703,13 @@ Status JParse::array(StringData fieldName, BSONObjBuilder& builder, bool subObje
}
if (!peekToken(RBRACKET)) {
+ DecimalCounter<uint32_t> index;
do {
- Status ret = value(builder.numStr(index), *arrayBuilder);
- if (ret != Status::OK()) {
+ Status ret = value(StringData{index}, *arrayBuilder);
+ if (!ret.isOK()) {
return ret;
}
- index++;
+ ++index;
} while (readToken(COMMA));
}
arrayBuilder->done();