diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2017-07-27 11:44:39 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2017-07-31 17:27:02 +0200 |
commit | 157ff8c0b62477efeea1947b80ad62c54a51decc (patch) | |
tree | f825f2990bdaf18983f58ca0560c6e73fcf99a1b /document/src/vespa/document/fieldvalue/mapfieldvalue.cpp | |
parent | 61857dbdbffcdc116ab9a365a95e1da131fe7a89 (diff) |
Use noexcept to get move constructor usage on containers and use fastCompare.
Diffstat (limited to 'document/src/vespa/document/fieldvalue/mapfieldvalue.cpp')
-rw-r--r-- | document/src/vespa/document/fieldvalue/mapfieldvalue.cpp | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/document/src/vespa/document/fieldvalue/mapfieldvalue.cpp b/document/src/vespa/document/fieldvalue/mapfieldvalue.cpp index 2b0463d39e6..3a294fa1fb4 100644 --- a/document/src/vespa/document/fieldvalue/mapfieldvalue.cpp +++ b/document/src/vespa/document/fieldvalue/mapfieldvalue.cpp @@ -252,9 +252,12 @@ MapFieldValue::hasChanged() const MapFieldValue::const_iterator MapFieldValue::find(const FieldValue& key) const { - for(size_t i(0), m(_keys->size()); i < m; i++) { - if ((*_keys)[i] == key) { - return const_iterator(*this, i); + size_t sz = _keys->size(); + if ((sz > 0) && (key.getClass().id() == (*_keys)[0].getClass().id())) { + for (size_t i(0), m(_keys->size()); i < m; i++) { + if ((*_keys)[i].fastCompare(key) == 0) { + return const_iterator(*this, i); + } } } return end(); @@ -263,17 +266,18 @@ MapFieldValue::find(const FieldValue& key) const MapFieldValue::iterator MapFieldValue::find(const FieldValue& key) { - for(size_t i(0), m(_keys->size()); i < m; i++) { - if ((*_keys)[i] == key) { - return iterator(*this, i); + size_t sz = _keys->size(); + if ((sz > 0) && (key.getClass().id() == (*_keys)[0].getClass().id())) { + for (size_t i(0), m(_keys->size()); i < m; i++) { + if ((*_keys)[i].fastCompare(key) == 0) { + return iterator(*this, i); + } } } return end(); } bool -MapFieldValue::checkAndRemove(const FieldValue& key, - ModificationStatus status, - bool wasModified, +MapFieldValue::checkAndRemove(const FieldValue& key, ModificationStatus status, bool wasModified, std::vector<const FieldValue*>& keysToRemove) const { if (status == ModificationStatus::REMOVED) { |