summaryrefslogtreecommitdiffstats
path: root/WebCore/dom/NodeRareData.h
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2009-03-03 19:30:52 -0800
committerThe Android Open Source Project <initial-contribution@android.com>2009-03-03 19:30:52 -0800
commit8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2 (patch)
tree11425ea0b299d6fb89c6d3618a22d97d5bf68d0f /WebCore/dom/NodeRareData.h
parent648161bb0edfc3d43db63caed5cc5213bc6cb78f (diff)
downloadexternal_webkit-8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2.zip
external_webkit-8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2.tar.gz
external_webkit-8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2.tar.bz2
auto import from //depot/cupcake/@135843
Diffstat (limited to 'WebCore/dom/NodeRareData.h')
-rw-r--r--WebCore/dom/NodeRareData.h96
1 files changed, 96 insertions, 0 deletions
diff --git a/WebCore/dom/NodeRareData.h b/WebCore/dom/NodeRareData.h
new file mode 100644
index 0000000..acad86c
--- /dev/null
+++ b/WebCore/dom/NodeRareData.h
@@ -0,0 +1,96 @@
+/**
+ *
+ * Copyright (C) 2008 Apple Computer, Inc.
+ * Copyright (C) 2008 David Smith <catfish.man@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef NodeRareData_h
+#define NodeRareData_h
+
+#include "DynamicNodeList.h"
+#include "StringHash.h"
+#include <wtf/HashSet.h>
+#include <wtf/OwnPtr.h>
+
+namespace WebCore {
+
+struct NodeListsNodeData {
+ typedef HashSet<DynamicNodeList*> NodeListSet;
+ NodeListSet m_listsWithCaches;
+
+ DynamicNodeList::Caches m_childNodeListCaches;
+
+ typedef HashMap<String, DynamicNodeList::Caches*> CacheMap;
+ CacheMap m_classNodeListCaches;
+ CacheMap m_nameNodeListCaches;
+
+ ~NodeListsNodeData()
+ {
+ deleteAllValues(m_classNodeListCaches);
+ deleteAllValues(m_nameNodeListCaches);
+ }
+
+ void invalidateCaches();
+ void invalidateCachesThatDependOnAttributes();
+ bool isEmpty() const;
+};
+
+class NodeRareData {
+public:
+ NodeRareData()
+ : m_focused(false)
+ , m_tabIndex(0)
+ , m_tabIndexSetExplicitly(false)
+ , m_needsFocusAppearanceUpdateSoonAfterAttach(false)
+ {
+ }
+
+ typedef HashMap<const Node*, NodeRareData*> NodeRareDataMap;
+
+ static NodeRareDataMap& rareDataMap()
+ {
+ static NodeRareDataMap* dataMap = new NodeRareDataMap;
+ return *dataMap;
+ }
+
+ static NodeRareData* rareDataFromMap(const Node* node)
+ {
+ return rareDataMap().get(node);
+ }
+
+ void clearNodeLists() { m_nodeLists.clear(); }
+ void setNodeLists(std::auto_ptr<NodeListsNodeData> lists) { m_nodeLists.set(lists.release()); }
+ NodeListsNodeData* nodeLists() const { return m_nodeLists.get(); }
+
+ short tabIndex() const { return m_tabIndex; }
+ void setTabIndexExplicitly(short index) { m_tabIndex = index; m_tabIndexSetExplicitly = true; }
+ bool tabIndexSetExplicitly() const { return m_tabIndexSetExplicitly; }
+
+ bool m_focused : 1;
+
+private:
+ OwnPtr<NodeListsNodeData> m_nodeLists;
+ short m_tabIndex;
+ bool m_tabIndexSetExplicitly : 1;
+public:
+ bool m_needsFocusAppearanceUpdateSoonAfterAttach : 1; //for ElementRareData
+};
+} //namespace
+
+#endif