aboutsummaryrefslogtreecommitdiffstats
path: root/document/src/vespa/document/fieldvalue/mapfieldvalue.cpp
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2017-07-27 11:44:39 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2017-07-31 17:27:02 +0200
commit157ff8c0b62477efeea1947b80ad62c54a51decc (patch)
treef825f2990bdaf18983f58ca0560c6e73fcf99a1b /document/src/vespa/document/fieldvalue/mapfieldvalue.cpp
parent61857dbdbffcdc116ab9a365a95e1da131fe7a89 (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.cpp22
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) {