summaryrefslogtreecommitdiff
path: root/src/mongo/bson/bsonobj.cpp
diff options
context:
space:
mode:
authorHenrik Edin <henrik.edin@mongodb.com>2021-04-06 13:29:26 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-04-08 13:53:23 +0000
commit0d88d02dbec6d3e83060e55211b7ce821df3d9d5 (patch)
tree3e665ad9488b81e5ebf4f54bf9eed51dda617571 /src/mongo/bson/bsonobj.cpp
parent3de090ad0ab2c587a198f1519642a3949d6a4a39 (diff)
downloadmongo-0d88d02dbec6d3e83060e55211b7ce821df3d9d5.tar.gz
SERVER-55835 Reuse calculated field name and value sizes in BSONIteratorSorted
Diffstat (limited to 'src/mongo/bson/bsonobj.cpp')
-rw-r--r--src/mongo/bson/bsonobj.cpp14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/mongo/bson/bsonobj.cpp b/src/mongo/bson/bsonobj.cpp
index 39cc5813d4c..adf1710001b 100644
--- a/src/mongo/bson/bsonobj.cpp
+++ b/src/mongo/bson/bsonobj.cpp
@@ -798,7 +798,7 @@ StringBuilder& operator<<(StringBuilder& s, const BSONObj& o) {
class BSONIteratorSorted::ElementFieldCmp {
public:
ElementFieldCmp(bool isArray);
- bool operator()(const char* s1, const char* s2) const;
+ bool operator()(const Field& lhs, const Field& rhs) const;
private:
str::LexNumCmp _cmp;
@@ -806,18 +806,18 @@ private:
BSONIteratorSorted::ElementFieldCmp::ElementFieldCmp(bool isArray) : _cmp(!isArray) {}
-bool BSONIteratorSorted::ElementFieldCmp::operator()(const char* s1, const char* s2) const {
- // Skip the type byte and compare field names.
- return _cmp(s1 + 1, s2 + 1);
+bool BSONIteratorSorted::ElementFieldCmp::operator()(const Field& lhs, const Field& rhs) const {
+ // Just compare field names.
+ return _cmp(lhs.fieldName, rhs.fieldName);
}
BSONIteratorSorted::BSONIteratorSorted(const BSONObj& o, const ElementFieldCmp& cmp)
- : _nfields(o.nFields()), _fields(new const char*[_nfields]) {
+ : _nfields(o.nFields()), _fields(std::make_unique<Field[]>(_nfields)) {
int x = 0;
BSONObjIterator i(o);
while (i.more()) {
- _fields[x++] = i.next().rawdata();
- verify(_fields[x - 1]);
+ auto elem = i.next();
+ _fields[x++] = {elem.fieldNameStringData(), elem.size()};
}
verify(x == _nfields);
std::sort(_fields.get(), _fields.get() + _nfields, cmp);