Chromium Code Reviews| Index: Source/core/dom/ElementData.cpp |
| diff --git a/Source/core/dom/ElementData.cpp b/Source/core/dom/ElementData.cpp |
| index dbd47f0fdacdd821daa0551b70e00f9a4a1fa55f..4d68d1e5a755bedb0f5ad55c4ac0c54695bef503 100644 |
| --- a/Source/core/dom/ElementData.cpp |
| +++ b/Source/core/dom/ElementData.cpp |
| @@ -100,27 +100,27 @@ bool ElementData::isEquivalent(const ElementData* other) const |
| if (!other) |
| return isEmpty(); |
| - unsigned length = this->length(); |
| - if (length != other->length()) |
| + AttributeIteratorAccessor attributes = attributesIterator(); |
| + if (attributes.size() != other->length()) |
| return false; |
| - for (unsigned i = 0; i < length; ++i) { |
| - const Attribute& attribute = attributeItem(i); |
| - const Attribute* otherAttr = other->getAttributeItem(attribute.name()); |
| - if (!otherAttr || attribute.value() != otherAttr->value()) |
| + AttributeConstIterator end = attributes.end(); |
| + for (AttributeConstIterator it = attributes.begin(); it != end; ++it) { |
| + const Attribute* otherAttr = other->getAttributeItem(it->name()); |
| + if (!otherAttr || it->value() != otherAttr->value()) |
| return false; |
| } |
| - |
| return true; |
| } |
| size_t ElementData::getAttrIndex(Attr* attr) const |
| { |
| // This relies on the fact that Attr's QualifiedName == the Attribute's name. |
| - unsigned length = this->length(); |
| - for (unsigned i = 0; i < length; ++i) { |
| - if (attributeItem(i).name() == attr->qualifiedName()) |
| - return i; |
| + AttributeIteratorAccessor attributes = attributesIterator(); |
| + AttributeConstIterator end = attributes.end(); |
| + for (AttributeConstIterator it = attributes.begin(); it != end; ++it) { |
| + if (it->name() == attr->qualifiedName()) |
| + return it.index(); |
| } |
| return kNotFound; |
| } |
| @@ -128,20 +128,20 @@ size_t ElementData::getAttrIndex(Attr* attr) const |
| size_t ElementData::getAttributeItemIndexSlowCase(const AtomicString& name, bool shouldIgnoreAttributeCase) const |
| { |
| // Continue to checking case-insensitively and/or full namespaced names if necessary: |
| - unsigned length = this->length(); |
| - for (unsigned i = 0; i < length; ++i) { |
| - const Attribute& attribute = attributeItem(i); |
| + AttributeIteratorAccessor attributes = attributesIterator(); |
| + AttributeConstIterator end = attributes.end(); |
| + for (AttributeConstIterator it = attributes.begin(); it != end; ++it) { |
| // FIXME: Why check the prefix? Namespace is all that should matter |
| // and all HTML/SVG attributes have a null namespace! |
| - if (!attribute.name().hasPrefix()) { |
| - if (shouldIgnoreAttributeCase && equalIgnoringCase(name, attribute.localName())) |
| - return i; |
| + if (!it->name().hasPrefix()) { |
| + if (shouldIgnoreAttributeCase && equalIgnoringCase(name, it->localName())) |
|
esprehn
2014/05/28 20:03:54
Why doesn't this side use the equalPossiblyIgnorin
Inactive
2014/05/29 15:14:01
This is the "slow" case method, it is only called
|
| + return it.index(); |
| } else { |
| // FIXME: Would be faster to do this comparison without calling toString, which |
| // generates a temporary string by concatenation. But this branch is only reached |
| // if the attribute name has a prefix, which is rare in HTML. |
| - if (equalPossiblyIgnoringCase(name, attribute.name().toString(), shouldIgnoreAttributeCase)) |
| - return i; |
| + if (equalPossiblyIgnoringCase(name, it->name().toString(), shouldIgnoreAttributeCase)) |
| + return it.index(); |
| } |
| } |
| return kNotFound; |
| @@ -217,7 +217,7 @@ PassRefPtr<ShareableElementData> UniqueElementData::makeShareableCopy() const |
| Attribute* UniqueElementData::getAttributeItem(const QualifiedName& name) |
| { |
| - unsigned length = this->length(); |
| + unsigned length = m_attributeVector.size(); |
| for (unsigned i = 0; i < length; ++i) { |
| if (m_attributeVector.at(i).name().matches(name)) |
| return &m_attributeVector.at(i); |