OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 inline const Attribute* ElementData::attributeBase() const | 178 inline const Attribute* ElementData::attributeBase() const |
179 { | 179 { |
180 if (m_isUnique) | 180 if (m_isUnique) |
181 return static_cast<const UniqueElementData*>(this)->m_attributeVector.be
gin(); | 181 return static_cast<const UniqueElementData*>(this)->m_attributeVector.be
gin(); |
182 return static_cast<const ShareableElementData*>(this)->m_attributeArray; | 182 return static_cast<const ShareableElementData*>(this)->m_attributeArray; |
183 } | 183 } |
184 | 184 |
185 inline size_t ElementData::getAttributeItemIndex(const QualifiedName& name, bool
shouldIgnoreCase) const | 185 inline size_t ElementData::getAttributeItemIndex(const QualifiedName& name, bool
shouldIgnoreCase) const |
186 { | 186 { |
187 const Attribute* begin = attributeBase(); | 187 const Attribute* begin = attributeBase(); |
188 for (unsigned i = 0; i < length(); ++i) { | 188 // Cache length for performance as ElementData::length() contains a conditio
nal branch. |
| 189 unsigned len = length(); |
| 190 for (unsigned i = 0; i < len; ++i) { |
189 const Attribute& attribute = begin[i]; | 191 const Attribute& attribute = begin[i]; |
190 if (attribute.name().matchesPossiblyIgnoringCase(name, shouldIgnoreCase)
) | 192 if (attribute.name().matchesPossiblyIgnoringCase(name, shouldIgnoreCase)
) |
191 return i; | 193 return i; |
192 } | 194 } |
193 return kNotFound; | 195 return kNotFound; |
194 } | 196 } |
195 | 197 |
196 // We use a boolean parameter instead of calling shouldIgnoreAttributeCase so th
at the caller | 198 // We use a boolean parameter instead of calling shouldIgnoreAttributeCase so th
at the caller |
197 // can tune the behavior (hasAttribute is case sensitive whereas getAttribute is
not). | 199 // can tune the behavior (hasAttribute is case sensitive whereas getAttribute is
not). |
198 inline size_t ElementData::getAttributeItemIndex(const AtomicString& name, bool
shouldIgnoreAttributeCase) const | 200 inline size_t ElementData::getAttributeItemIndex(const AtomicString& name, bool
shouldIgnoreAttributeCase) const |
199 { | 201 { |
| 202 // Cache length for performance as ElementData::length() contains a conditio
nal branch. |
200 unsigned len = length(); | 203 unsigned len = length(); |
201 bool doSlowCheck = shouldIgnoreAttributeCase; | 204 bool doSlowCheck = shouldIgnoreAttributeCase; |
202 | 205 |
203 // Optimize for the case where the attribute exists and its name exactly mat
ches. | 206 // Optimize for the case where the attribute exists and its name exactly mat
ches. |
204 const Attribute* begin = attributeBase(); | 207 const Attribute* begin = attributeBase(); |
205 for (unsigned i = 0; i < len; ++i) { | 208 for (unsigned i = 0; i < len; ++i) { |
206 const Attribute& attribute = begin[i]; | 209 const Attribute& attribute = begin[i]; |
207 if (!attribute.name().hasPrefix()) { | 210 if (!attribute.name().hasPrefix()) { |
208 if (name == attribute.localName()) | 211 if (name == attribute.localName()) |
209 return i; | 212 return i; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
245 } | 248 } |
246 | 249 |
247 inline Attribute* UniqueElementData::attributeItem(unsigned index) | 250 inline Attribute* UniqueElementData::attributeItem(unsigned index) |
248 { | 251 { |
249 return &m_attributeVector.at(index); | 252 return &m_attributeVector.at(index); |
250 } | 253 } |
251 | 254 |
252 } // namespace WebCore | 255 } // namespace WebCore |
253 | 256 |
254 #endif // ElementData_h | 257 #endif // ElementData_h |
OLD | NEW |