Changeset 77239 in webkit


Ignore:
Timestamp:
Feb 1, 2011 2:41:19 AM (13 years ago)
Author:
rolandsteiner@chromium.org
Message:

2011-02-01 Roland Steiner <rolandsteiner@chromium.org>

Reviewed by Dimitri Glazkov.

Bug 53289 - DOM: Move DocumentOrderedMap from Document into separate files
https://bugs.webkit.org/show_bug.cgi?id=53289

Moving the nested class DocumentOrderedMap from Document into separate files,
updating code where necessary.

No new tests. (refactoring)

  • Android.mk:
  • CMakeLists.txt:
  • GNUMakefile.am:
  • WebCore.gypi:
  • WebCore.pro:
  • WebCore.vcproj/WebCore.vcproj:
  • WebCore.xcodeproj/project.pbxproj:
  • dom/Document.cpp: (WebCore::Document::getElementById): (WebCore::Document::getImageMap):
  • dom/Document.h:
  • dom/DocumentOrderedMap.cpp: Added. (WebCore::keyMatchesId): (WebCore::keyMatchesMapName): (WebCore::keyMatchesLowercasedMapName): (WebCore::DocumentOrderedMap::clear): (WebCore::DocumentOrderedMap::add): (WebCore::DocumentOrderedMap::remove): (WebCore::DocumentOrderedMap::get): (WebCore::DocumentOrderedMap::getElementById): (WebCore::DocumentOrderedMap::getElementByMapName): (WebCore::DocumentOrderedMap::getElementByLowercasedMapName):
  • dom/DocumentOrderedMap.h: Added. (WebCore::DocumentOrderedMap::contains): (WebCore::DocumentOrderedMap::containsMultiple):
  • dom/DOMAllInOne.cpp:
Location:
trunk/Source/WebCore
Files:
2 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/Android.mk

    r77231 r77239  
    122122        dom/DocumentMarkerController.cpp \
    123123        dom/DocumentParser.cpp \
     124        dom/DocumentOrderedMap.cpp \
    124125        dom/DocumentType.cpp \
    125126        dom/DynamicNodeList.cpp \
  • trunk/Source/WebCore/CMakeLists.txt

    r77231 r77239  
    839839    dom/DocumentFragment.cpp
    840840    dom/DocumentParser.cpp
     841    dom/DocumentOrderedMap.cpp
    841842    dom/DocumentType.cpp
    842843    dom/DOMImplementation.cpp
  • trunk/Source/WebCore/ChangeLog

    r77235 r77239  
     12011-02-01  Roland Steiner  <rolandsteiner@chromium.org>
     2
     3        Reviewed by Dimitri Glazkov.
     4
     5        Bug 53289 - DOM: Move DocumentOrderedMap from Document into separate files
     6        https://bugs.webkit.org/show_bug.cgi?id=53289
     7
     8        Moving the nested class DocumentOrderedMap from Document into separate files,
     9        updating code where necessary.
     10
     11        No new tests. (refactoring)
     12
     13        * Android.mk:
     14        * CMakeLists.txt:
     15        * GNUMakefile.am:
     16        * WebCore.gypi:
     17        * WebCore.pro:
     18        * WebCore.vcproj/WebCore.vcproj:
     19        * WebCore.xcodeproj/project.pbxproj:
     20        * dom/Document.cpp:
     21        (WebCore::Document::getElementById):
     22        (WebCore::Document::getImageMap):
     23        * dom/Document.h:
     24        * dom/DocumentOrderedMap.cpp: Added.
     25        (WebCore::keyMatchesId):
     26        (WebCore::keyMatchesMapName):
     27        (WebCore::keyMatchesLowercasedMapName):
     28        (WebCore::DocumentOrderedMap::clear):
     29        (WebCore::DocumentOrderedMap::add):
     30        (WebCore::DocumentOrderedMap::remove):
     31        (WebCore::DocumentOrderedMap::get):
     32        (WebCore::DocumentOrderedMap::getElementById):
     33        (WebCore::DocumentOrderedMap::getElementByMapName):
     34        (WebCore::DocumentOrderedMap::getElementByLowercasedMapName):
     35        * dom/DocumentOrderedMap.h: Added.
     36        (WebCore::DocumentOrderedMap::contains):
     37        (WebCore::DocumentOrderedMap::containsMultiple):
     38        * dom/DOMAllInOne.cpp:
     39
    1402011-02-01  Mario Sanchez Prada  <msanchez@igalia.com>
    241
  • trunk/Source/WebCore/GNUmakefile.am

    r77231 r77239  
    11681168        Source/WebCore/dom/DocumentMarkerController.h \
    11691169        Source/WebCore/dom/DocumentMarker.h \
     1170        Source/WebCore/dom/DocumentOrderedMap.cpp \
     1171        Source/WebCore/dom/DocumentOrderedMap.h \
    11701172        Source/WebCore/dom/DocumentParser.cpp \
    11711173        Source/WebCore/dom/DocumentParser.h \
  • trunk/Source/WebCore/WebCore.gypi

    r77231 r77239  
    12211221            'dom/DocumentMarkerController.cpp',
    12221222            'dom/DocumentMarkerController.h',
     1223            'dom/DocumentOrderedMap.cpp',
     1224            'dom/DocumentOrderedMap.h',
    12231225            'dom/DocumentParser.cpp',
    12241226            'dom/DocumentParser.h',
  • trunk/Source/WebCore/WebCore.pro

    r77231 r77239  
    731731    dom/DocumentFragment.cpp \
    732732    dom/DocumentMarkerController.cpp \
     733    dom/DocumentOrderedMap.cpp \
    733734    dom/DocumentParser.cpp \
    734735    dom/DocumentType.cpp \
     
    16651666    dom/DocumentMarker.h \
    16661667    dom/DocumentMarkerController.h \
     1668    dom/DocumentOrderedMap.h \
    16671669    dom/DocumentType.h \
    16681670    dom/DOMImplementation.h \
  • trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj

    r77231 r77239  
    4307943079                        </File>
    4308043080                        <File
     43081                                RelativePath="..\dom\DocumentOrderedMap.cpp"
     43082                                >
     43083                                <FileConfiguration
     43084                                        Name="Debug|Win32"
     43085                                        ExcludedFromBuild="true"
     43086                                        >
     43087                                        <Tool
     43088                                                Name="VCCLCompilerTool"
     43089                                        />
     43090                                </FileConfiguration>
     43091                                <FileConfiguration
     43092                                        Name="Release|Win32"
     43093                                        ExcludedFromBuild="true"
     43094                                        >
     43095                                        <Tool
     43096                                                Name="VCCLCompilerTool"
     43097                                        />
     43098                                </FileConfiguration>
     43099                                <FileConfiguration
     43100                                        Name="Debug_Cairo_CFLite|Win32"
     43101                                        ExcludedFromBuild="true"
     43102                                        >
     43103                                        <Tool
     43104                                                Name="VCCLCompilerTool"
     43105                                        />
     43106                                </FileConfiguration>
     43107                                <FileConfiguration
     43108                                        Name="Release_Cairo_CFLite|Win32"
     43109                                        ExcludedFromBuild="true"
     43110                                        >
     43111                                        <Tool
     43112                                                Name="VCCLCompilerTool"
     43113                                        />
     43114                                </FileConfiguration>
     43115                                <FileConfiguration
     43116                                        Name="Debug_All|Win32"
     43117                                        ExcludedFromBuild="true"
     43118                                        >
     43119                                        <Tool
     43120                                                Name="VCCLCompilerTool"
     43121                                        />
     43122                                </FileConfiguration>
     43123                                <FileConfiguration
     43124                                        Name="Release_LTCG|Win32"
     43125                                        ExcludedFromBuild="true"
     43126                                        >
     43127                                        <Tool
     43128                                                Name="VCCLCompilerTool"
     43129                                        />
     43130                                </FileConfiguration>
     43131                        </File>
     43132                        <File
     43133                                RelativePath="..\dom\DocumentOrderedMap.h"
     43134                                >
     43135                        </File>
     43136                        <File
    4308143137                                RelativePath="..\dom\DocumentParser.cpp"
    4308243138                                >
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r77231 r77239  
    317317                148AFDA50AF58360008CC700 /* ExceptionHandlers.h in Headers */ = {isa = PBXBuildFile; fileRef = 148AFDA30AF58360008CC700 /* ExceptionHandlers.h */; settings = {ATTRIBUTES = (Private, ); }; };
    318318                148AFDA60AF58360008CC700 /* ExceptionHandlers.mm in Sources */ = {isa = PBXBuildFile; fileRef = 148AFDA40AF58360008CC700 /* ExceptionHandlers.mm */; };
     319                14947FFD12F80CD200A0F631 /* DocumentOrderedMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14947FFB12F80CD200A0F631 /* DocumentOrderedMap.cpp */; };
     320                14947FFE12F80CD200A0F631 /* DocumentOrderedMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 14947FFC12F80CD200A0F631 /* DocumentOrderedMap.h */; settings = {ATTRIBUTES = (Private, ); }; };
    319321                14993BE50B2F2B1C0050497F /* FocusController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14993BE30B2F2B1C0050497F /* FocusController.cpp */; };
    320322                14993BE60B2F2B1C0050497F /* FocusController.h in Headers */ = {isa = PBXBuildFile; fileRef = 14993BE40B2F2B1C0050497F /* FocusController.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    66436645                148AFDA30AF58360008CC700 /* ExceptionHandlers.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ExceptionHandlers.h; sourceTree = "<group>"; };
    66446646                148AFDA40AF58360008CC700 /* ExceptionHandlers.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = ExceptionHandlers.mm; sourceTree = "<group>"; };
     6647                14947FFB12F80CD200A0F631 /* DocumentOrderedMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DocumentOrderedMap.cpp; sourceTree = "<group>"; };
     6648                14947FFC12F80CD200A0F631 /* DocumentOrderedMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DocumentOrderedMap.h; sourceTree = "<group>"; };
    66456649                14993BE30B2F2B1C0050497F /* FocusController.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FocusController.cpp; sourceTree = "<group>"; };
    66466650                14993BE40B2F2B1C0050497F /* FocusController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FocusController.h; sourceTree = "<group>"; };
     
    1899819002                                CE057FA31220731100A476D5 /* DocumentMarkerController.cpp */,
    1899919003                                CE057FA41220731100A476D5 /* DocumentMarkerController.h */,
     19004                                14947FFB12F80CD200A0F631 /* DocumentOrderedMap.cpp */,
     19005                                14947FFC12F80CD200A0F631 /* DocumentOrderedMap.h */,
    1900019006                                A8C2280D11D4A59700D5A7D3 /* DocumentParser.cpp */,
    1900119007                                BCCFBAE70B5152ED0001F1D7 /* DocumentParser.h */,
     
    2247022476                                BCE4413412F748E2009B84B8 /* RenderCombineText.h in Headers */,
    2247122477                                BCE4413612F7490B009B84B8 /* FontWidthVariant.h in Headers */,
     22478                                14947FFE12F80CD200A0F631 /* DocumentOrderedMap.h in Headers */,
    2247222479                        );
    2247322480                        runOnlyForDeploymentPostprocessing = 0;
     
    2516925176                                0F3DD44F12F5EA1B000D9190 /* ShadowBlur.cpp in Sources */,
    2517025177                                BCE4413312F748E2009B84B8 /* RenderCombineText.cpp in Sources */,
     25178                                14947FFD12F80CD200A0F631 /* DocumentOrderedMap.cpp in Sources */,
    2517125179                        );
    2517225180                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/Source/WebCore/dom/DOMAllInOne.cpp

    r77231 r77239  
    6161#include "DocumentFragment.cpp"
    6262#include "DocumentMarkerController.cpp"
     63#include "DocumentOrderedMap.cpp"
    6364#include "DocumentParser.cpp"
    6465#include "DocumentType.cpp"
  • trunk/Source/WebCore/dom/Document.cpp

    r77231 r77239  
    227227static const int cLayoutScheduleThreshold = 250;
    228228
    229 // These functions can't have internal linkage because they are used as template arguments.
    230 bool keyMatchesId(AtomicStringImpl*, Element*);
    231 bool keyMatchesMapName(AtomicStringImpl*, Element*);
    232 bool keyMatchesLowercasedMapName(AtomicStringImpl*, Element*);
    233 
    234229// DOM Level 2 says (letters added):
    235230//
     
    508503}
    509504
    510 inline void Document::DocumentOrderedMap::clear()
    511 {
    512     m_map.clear();
    513     m_duplicateCounts.clear();
    514 }
    515 
    516505void Document::removedLastRef()
    517506{
     
    996985}
    997986
    998 inline void Document::DocumentOrderedMap::add(AtomicStringImpl* key, Element* element)
    999 {
    1000     ASSERT(key);
    1001     ASSERT(element);
    1002 
    1003     if (!m_duplicateCounts.contains(key)) {
    1004         // Fast path. The key is not already in m_duplicateCounts, so we assume that it's
    1005         // also not already in m_map and try to add it. If that add succeeds, we're done.
    1006         pair<Map::iterator, bool> addResult = m_map.add(key, element);
    1007         if (addResult.second)
    1008             return;
    1009 
    1010         // The add failed, so this key was already cached in m_map.
    1011         // There are multiple elements with this key. Remove the m_map
    1012         // cache for this key so get searches for it next time it is called.
    1013         m_map.remove(addResult.first);
    1014         m_duplicateCounts.add(key);
    1015     } else {
    1016         // There are multiple elements with this key. Remove the m_map
    1017         // cache for this key so get will search for it next time it is called.
    1018         Map::iterator cachedItem = m_map.find(key);
    1019         if (cachedItem != m_map.end()) {
    1020             m_map.remove(cachedItem);
    1021             m_duplicateCounts.add(key);
    1022         }
    1023     }
    1024 
    1025     m_duplicateCounts.add(key);
    1026 }
    1027 
    1028 inline void Document::DocumentOrderedMap::remove(AtomicStringImpl* key, Element* element)
    1029 {
    1030     ASSERT(key);
    1031     ASSERT(element);
    1032 
    1033     m_map.checkConsistency();
    1034     Map::iterator cachedItem = m_map.find(key);
    1035     if (cachedItem != m_map.end() && cachedItem->second == element)
    1036         m_map.remove(cachedItem);
    1037     else
    1038         m_duplicateCounts.remove(key);
    1039 }
    1040 
    1041 template<bool keyMatches(AtomicStringImpl*, Element*)> inline Element* Document::DocumentOrderedMap::get(AtomicStringImpl* key, const Document* document) const
    1042 {
    1043     ASSERT(key);
    1044 
    1045     m_map.checkConsistency();
    1046 
    1047     Element* element = m_map.get(key);
    1048     if (element)
    1049         return element;
    1050 
    1051     if (m_duplicateCounts.contains(key)) {
    1052         // We know there's at least one node that matches; iterate to find the first one.
    1053         for (Node* node = document->firstChild(); node; node = node->traverseNextNode()) {
    1054             if (!node->isElementNode())
    1055                 continue;
    1056             element = static_cast<Element*>(node);
    1057             if (!keyMatches(key, element))
    1058                 continue;
    1059             m_duplicateCounts.remove(key);
    1060             m_map.set(key, element);
    1061             return element;
    1062         }
    1063         ASSERT_NOT_REACHED();
    1064     }
    1065 
    1066     return 0;
    1067 }
    1068 
    1069 inline bool keyMatchesId(AtomicStringImpl* key, Element* element)
    1070 {
    1071     return element->hasID() && element->getIdAttribute().impl() == key;
    1072 }
    1073 
    1074987Element* Document::getElementById(const AtomicString& elementId) const
    1075988{
    1076989    if (elementId.isEmpty())
    1077990        return 0;
    1078     return m_elementsById.get<keyMatchesId>(elementId.impl(), this);
     991    return m_elementsById.getElementById(elementId.impl(), this);
    1079992}
    1080993
     
    39013814}
    39023815
    3903 inline bool keyMatchesMapName(AtomicStringImpl* key, Element* element)
    3904 {
    3905     return element->hasTagName(mapTag) && static_cast<HTMLMapElement*>(element)->getName().impl() == key;
    3906 }
    3907 
    3908 inline bool keyMatchesLowercasedMapName(AtomicStringImpl* key, Element* element)
    3909 {
    3910     return element->hasTagName(mapTag) && static_cast<HTMLMapElement*>(element)->getName().lower().impl() == key;
    3911 }
    3912 
    39133816HTMLMapElement* Document::getImageMap(const String& url) const
    39143817{
     
    39183821    String name = (hashPos == notFound ? url : url.substring(hashPos + 1)).impl();
    39193822    if (isHTMLDocument())
    3920         return static_cast<HTMLMapElement*>(m_imageMapsByName.get<keyMatchesLowercasedMapName>(AtomicString(name.lower()).impl(), this));
    3921     return static_cast<HTMLMapElement*>(m_imageMapsByName.get<keyMatchesMapName>(AtomicString(name).impl(), this));
     3823        return static_cast<HTMLMapElement*>(m_imageMapsByName.getElementByLowercasedMapName(AtomicString(name.lower()).impl(), this));
     3824    return static_cast<HTMLMapElement*>(m_imageMapsByName.getElementByMapName(AtomicString(name).impl(), this));
    39223825}
    39233826
  • trunk/Source/WebCore/dom/Document.h

    r77231 r77239  
    3434#include "ContainerNode.h"
    3535#include "DOMTimeStamp.h"
     36#include "DocumentOrderedMap.h"
    3637#include "DocumentTiming.h"
    3738#include "QualifiedName.h"
     
    4041#include "ViewportArguments.h"
    4142#include <wtf/FixedArray.h>
    42 #include <wtf/HashCountedSet.h>
    4343#include <wtf/OwnPtr.h>
    4444#include <wtf/PassOwnPtr.h>
     45#include <wtf/PassRefPtr.h>
    4546
    4647#if USE(JSC)
     
    10951096
    10961097private:
    1097     class DocumentOrderedMap {
    1098     public:
    1099         void add(AtomicStringImpl*, Element*);
    1100         void remove(AtomicStringImpl*, Element*);
    1101         void clear();
    1102 
    1103         bool contains(AtomicStringImpl*) const;
    1104         bool containsMultiple(AtomicStringImpl*) const;
    1105         template<bool keyMatches(AtomicStringImpl*, Element*)> Element* get(AtomicStringImpl*, const Document*) const;
    1106 
    1107         void checkConsistency() const;
    1108 
    1109     private:
    1110         typedef HashMap<AtomicStringImpl*, Element*> Map;
    1111 
    1112         // We maintain the invariant that m_duplicateCounts is the count of all elements with a given key
    1113         // excluding the one referenced in m_map, if any. This means it one less than the total count
    1114         // when the first node with a given key is cached, otherwise the same as the total count.
    1115         mutable Map m_map;
    1116         mutable HashCountedSet<AtomicStringImpl*> m_duplicateCounts;
    1117     };
    1118 
    11191098    friend class IgnoreDestructiveWriteCountIncrementer;
    11201099
     
    14121391};
    14131392
    1414 inline bool Document::DocumentOrderedMap::contains(AtomicStringImpl* id) const
    1415 {
    1416     return m_map.contains(id) || m_duplicateCounts.contains(id);
    1417 }
    1418 
    1419 inline bool Document::DocumentOrderedMap::containsMultiple(AtomicStringImpl* id) const
    1420 {
    1421     return m_duplicateCounts.contains(id);
    1422 }
    1423 
    14241393inline bool Document::hasElementWithId(AtomicStringImpl* id) const
    14251394{
Note: See TracChangeset for help on using the changeset viewer.