| Index: Source/core/dom/StaticNodeList.h
|
| diff --git a/Source/core/dom/StaticNodeList.h b/Source/core/dom/StaticNodeList.h
|
| index 081ad4431be5bc2a97e868f4e21a0316a7534324..6f9f46dbb5fbe748d3bf64ff2cef7fa8296aa1f6 100644
|
| --- a/Source/core/dom/StaticNodeList.h
|
| +++ b/Source/core/dom/StaticNodeList.h
|
| @@ -29,41 +29,82 @@
|
| #ifndef StaticNodeList_h
|
| #define StaticNodeList_h
|
|
|
| -#include "core/dom/Node.h"
|
| #include "core/dom/NodeList.h"
|
| #include "wtf/PassRefPtr.h"
|
| #include "wtf/RefPtr.h"
|
| #include "wtf/Vector.h"
|
| +#include <v8.h>
|
|
|
| namespace blink {
|
|
|
| +class Element;
|
| class Node;
|
|
|
| -class StaticNodeList FINAL : public NodeList {
|
| +template <typename NodeType>
|
| +class StaticNodeTypeList FINAL : public NodeList {
|
| public:
|
| - static PassRefPtrWillBeRawPtr<StaticNodeList> adopt(WillBeHeapVector<RefPtrWillBeMember<Node> >& nodes);
|
| + static PassRefPtrWillBeRawPtr<StaticNodeTypeList> adopt(WillBeHeapVector<RefPtrWillBeMember<NodeType> >& nodes);
|
|
|
| - static PassRefPtrWillBeRawPtr<StaticNodeList> createEmpty()
|
| + static PassRefPtrWillBeRawPtr<StaticNodeTypeList> createEmpty()
|
| {
|
| - return adoptRefWillBeNoop(new StaticNodeList);
|
| + return adoptRefWillBeNoop(new StaticNodeTypeList);
|
| }
|
|
|
| - virtual ~StaticNodeList();
|
| + virtual ~StaticNodeTypeList();
|
|
|
| virtual unsigned length() const OVERRIDE;
|
| - virtual Node* item(unsigned index) const OVERRIDE;
|
| + virtual NodeType* item(unsigned index) const OVERRIDE;
|
|
|
| virtual void trace(Visitor*) OVERRIDE;
|
|
|
| private:
|
| ptrdiff_t AllocationSize()
|
| {
|
| - return m_nodes.capacity() * sizeof(RefPtrWillBeMember<Node>);
|
| + return m_nodes.capacity() * sizeof(RefPtrWillBeMember<NodeType>);
|
| }
|
|
|
| - WillBeHeapVector<RefPtrWillBeMember<Node> > m_nodes;
|
| + WillBeHeapVector<RefPtrWillBeMember<NodeType> > m_nodes;
|
| };
|
|
|
| +typedef StaticNodeTypeList<Node> StaticNodeList;
|
| +typedef StaticNodeTypeList<Element> StaticElementList;
|
| +
|
| +template <typename NodeType>
|
| +PassRefPtrWillBeRawPtr<StaticNodeTypeList<NodeType> > StaticNodeTypeList<NodeType>::adopt(WillBeHeapVector<RefPtrWillBeMember<NodeType> >& nodes)
|
| +{
|
| + RefPtrWillBeRawPtr<StaticNodeTypeList<NodeType> > nodeList = adoptRefWillBeNoop(new StaticNodeTypeList<NodeType>);
|
| + nodeList->m_nodes.swap(nodes);
|
| + v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(nodeList->AllocationSize());
|
| + return nodeList.release();
|
| +}
|
| +
|
| +template <typename NodeType>
|
| +StaticNodeTypeList<NodeType>::~StaticNodeTypeList()
|
| +{
|
| + v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(-AllocationSize());
|
| +}
|
| +
|
| +template <typename NodeType>
|
| +unsigned StaticNodeTypeList<NodeType>::length() const
|
| +{
|
| + return m_nodes.size();
|
| +}
|
| +
|
| +template <typename NodeType>
|
| +NodeType* StaticNodeTypeList<NodeType>::item(unsigned index) const
|
| +{
|
| + if (index < m_nodes.size())
|
| + return m_nodes[index].get();
|
| + return 0;
|
| +}
|
| +
|
| +template <typename NodeType>
|
| +void StaticNodeTypeList<NodeType>::trace(Visitor* visitor)
|
| +{
|
| + visitor->trace(m_nodes);
|
| + NodeList::trace(visitor);
|
| +}
|
| +
|
| } // namespace blink
|
|
|
| #endif // StaticNodeList_h
|
|
|