diff options
author | Billy Donahue <billy.donahue@mongodb.com> | 2019-07-04 17:57:25 -0400 |
---|---|---|
committer | Billy Donahue <billy.donahue@mongodb.com> | 2019-07-09 14:32:01 -0400 |
commit | f2bb23436a46afacfc8e3dc65fda743fafe6b2c3 (patch) | |
tree | 990d9667db82f124bde3392c0240220a3707cbe1 /src/mongo/bson | |
parent | a7cb58fe04b1a13909e98829a9235eb4fa837e8c (diff) | |
download | mongo-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.cpp | 17 | ||||
-rw-r--r-- | src/mongo/bson/bsonobjbuilder.h | 26 | ||||
-rw-r--r-- | src/mongo/bson/json.cpp | 9 |
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(); |