| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
| 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc.
All rights reserved. | 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc.
All rights reserved. |
| 6 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) | 6 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) |
| 7 * Copyright (C) 2014 Samsung Electronics. All rights reserved. | 7 * Copyright (C) 2014 Samsung Electronics. All rights reserved. |
| 8 * | 8 * |
| 9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
| 10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 95 template <class NodeType> | 95 template <class NodeType> |
| 96 static Node* traverseNextTemplate(NodeType&); | 96 static Node* traverseNextTemplate(NodeType&); |
| 97 template <class NodeType> | 97 template <class NodeType> |
| 98 static Node* traverseNextTemplate(NodeType&, const Node* stayWithin); | 98 static Node* traverseNextTemplate(NodeType&, const Node* stayWithin); |
| 99 template <class NodeType> | 99 template <class NodeType> |
| 100 static Node* childAtTemplate(NodeType&, unsigned); | 100 static Node* childAtTemplate(NodeType&, unsigned); |
| 101 }; | 101 }; |
| 102 | 102 |
| 103 template <class Iterator> | 103 template <class Iterator> |
| 104 class TraversalRange { | 104 class TraversalRange { |
| 105 STACK_ALLOCATED(); |
| 105 public: | 106 public: |
| 106 using StartNodeType = typename Iterator::StartNodeType; | 107 using StartNodeType = typename Iterator::StartNodeType; |
| 107 explicit TraversalRange(const StartNodeType* start) : m_start(start) { } | 108 explicit TraversalRange(const StartNodeType* start) : m_start(start) { } |
| 108 Iterator begin() { return Iterator(m_start); } | 109 Iterator begin() { return Iterator(m_start); } |
| 109 Iterator end() { return Iterator::end(); } | 110 Iterator end() { return Iterator::end(); } |
| 110 private: | 111 private: |
| 111 const StartNodeType* m_start; | 112 RawPtrWillBeMember<const StartNodeType> m_start; |
| 112 }; | 113 }; |
| 113 | 114 |
| 114 template <class TraversalNext> | 115 template <class TraversalNext> |
| 115 class TraversalIteratorBase { | 116 class TraversalIteratorBase { |
| 117 STACK_ALLOCATED(); |
| 116 public: | 118 public: |
| 117 using NodeType = typename TraversalNext::TraversalNodeType; | 119 using NodeType = typename TraversalNext::TraversalNodeType; |
| 118 NodeType& operator*() { return *m_current; } | 120 NodeType& operator*() { return *m_current; } |
| 119 bool operator!=(const TraversalIteratorBase& rval) const { return m_current
!= rval.m_current ; } | 121 bool operator!=(const TraversalIteratorBase& rval) const { return m_current
!= rval.m_current ; } |
| 120 protected: | 122 protected: |
| 121 explicit TraversalIteratorBase(NodeType* current) : m_current(current) { }; | 123 explicit TraversalIteratorBase(NodeType* current) : m_current(current) { } |
| 122 NodeType* m_current; | 124 |
| 125 RawPtrWillBeMember<NodeType> m_current; |
| 123 }; | 126 }; |
| 124 | 127 |
| 125 template <class TraversalNext> | 128 template <class TraversalNext> |
| 126 class TraversalChildrenIterator : public TraversalIteratorBase<TraversalNext> { | 129 class TraversalChildrenIterator : public TraversalIteratorBase<TraversalNext> { |
| 130 STACK_ALLOCATED(); |
| 127 public: | 131 public: |
| 128 using StartNodeType = Node; | 132 using StartNodeType = Node; |
| 129 using TraversalIteratorBase<TraversalNext>::m_current; | 133 using TraversalIteratorBase<TraversalNext>::m_current; |
| 130 explicit TraversalChildrenIterator(const StartNodeType* start) : TraversalIt
eratorBase<TraversalNext>(TraversalNext::firstWithin(*start)) { }; | 134 explicit TraversalChildrenIterator(const StartNodeType* start) : TraversalIt
eratorBase<TraversalNext>(TraversalNext::firstWithin(*start)) { } |
| 131 void operator++() { m_current = TraversalNext::nextSibling(*m_current); }; | 135 void operator++() { m_current = TraversalNext::nextSibling(*m_current); } |
| 132 static TraversalChildrenIterator end() { return TraversalChildrenIterator();
}; | 136 static TraversalChildrenIterator end() { return TraversalChildrenIterator();
} |
| 133 private: | 137 private: |
| 134 TraversalChildrenIterator() : TraversalIteratorBase<TraversalNext>(nullptr)
{ }; | 138 TraversalChildrenIterator() : TraversalIteratorBase<TraversalNext>(nullptr)
{ } |
| 135 }; | 139 }; |
| 136 | 140 |
| 137 template <class TraversalNext> | 141 template <class TraversalNext> |
| 138 class TraversalNextIterator : public TraversalIteratorBase<TraversalNext> { | 142 class TraversalNextIterator : public TraversalIteratorBase<TraversalNext> { |
| 143 STACK_ALLOCATED(); |
| 139 public: | 144 public: |
| 140 using StartNodeType = typename TraversalNext::TraversalNodeType; | 145 using StartNodeType = typename TraversalNext::TraversalNodeType; |
| 141 using TraversalIteratorBase<TraversalNext>::m_current; | 146 using TraversalIteratorBase<TraversalNext>::m_current; |
| 142 explicit TraversalNextIterator(const StartNodeType* start) : TraversalIterat
orBase<TraversalNext>(const_cast<StartNodeType*>(start)) { }; | 147 explicit TraversalNextIterator(const StartNodeType* start) : TraversalIterat
orBase<TraversalNext>(const_cast<StartNodeType*>(start)) { } |
| 143 void operator++() { m_current = TraversalNext::next(*m_current); } | 148 void operator++() { m_current = TraversalNext::next(*m_current); } |
| 144 static TraversalNextIterator end() { return TraversalNextIterator(nullptr);
}; | 149 static TraversalNextIterator end() { return TraversalNextIterator(nullptr);
} |
| 145 }; | 150 }; |
| 146 | 151 |
| 147 template <class TraversalNext> | 152 template <class TraversalNext> |
| 148 class TraversalDescendantIterator : public TraversalIteratorBase<TraversalNext>
{ | 153 class TraversalDescendantIterator : public TraversalIteratorBase<TraversalNext>
{ |
| 154 STACK_ALLOCATED(); |
| 149 public: | 155 public: |
| 150 using StartNodeType = Node; | 156 using StartNodeType = Node; |
| 151 using TraversalIteratorBase<TraversalNext>::m_current; | 157 using TraversalIteratorBase<TraversalNext>::m_current; |
| 152 explicit TraversalDescendantIterator(const StartNodeType* start) : Traversal
IteratorBase<TraversalNext>(TraversalNext::firstWithin(*start)), m_root(start) {
}; | 158 explicit TraversalDescendantIterator(const StartNodeType* start) : Traversal
IteratorBase<TraversalNext>(TraversalNext::firstWithin(*start)), m_root(start) {
} |
| 153 void operator++() { m_current = TraversalNext::next(*m_current, m_root); } | 159 void operator++() { m_current = TraversalNext::next(*m_current, m_root); } |
| 154 static TraversalDescendantIterator end() { return TraversalDescendantIterato
r(); }; | 160 static TraversalDescendantIterator end() { return TraversalDescendantIterato
r(); } |
| 155 private: | 161 private: |
| 156 TraversalDescendantIterator() : TraversalIteratorBase<TraversalNext>(nullptr
), m_root(nullptr) { }; | 162 TraversalDescendantIterator() : TraversalIteratorBase<TraversalNext>(nullptr
), m_root(nullptr) { } |
| 157 const Node* m_root; | 163 RawPtrWillBeMember<const Node> m_root; |
| 158 }; | 164 }; |
| 159 | 165 |
| 160 template <class TraversalNext> | 166 template <class TraversalNext> |
| 161 class TraversalInclusiveDescendantIterator : public TraversalIteratorBase<Traver
salNext> { | 167 class TraversalInclusiveDescendantIterator : public TraversalIteratorBase<Traver
salNext> { |
| 168 STACK_ALLOCATED(); |
| 162 public: | 169 public: |
| 163 using StartNodeType = typename TraversalNext::TraversalNodeType; | 170 using StartNodeType = typename TraversalNext::TraversalNodeType; |
| 164 using NodeType = typename TraversalNext::TraversalNodeType; | 171 using NodeType = typename TraversalNext::TraversalNodeType; |
| 165 using TraversalIteratorBase<TraversalNext>::m_current; | 172 using TraversalIteratorBase<TraversalNext>::m_current; |
| 166 explicit TraversalInclusiveDescendantIterator(const StartNodeType* start) :
TraversalIteratorBase<TraversalNext>(const_cast<NodeType*>(start)), m_root(start
) { }; | 173 explicit TraversalInclusiveDescendantIterator(const StartNodeType* start) :
TraversalIteratorBase<TraversalNext>(const_cast<NodeType*>(start)), m_root(start
) { } |
| 167 void operator++() { m_current = TraversalNext::next(*m_current, m_root); } | 174 void operator++() { m_current = TraversalNext::next(*m_current, m_root); } |
| 168 static TraversalInclusiveDescendantIterator end() { return TraversalInclusiv
eDescendantIterator(nullptr); }; | 175 static TraversalInclusiveDescendantIterator end() { return TraversalInclusiv
eDescendantIterator(nullptr); } |
| 169 private: | 176 private: |
| 170 const StartNodeType* m_root; | 177 RawPtrWillBeMember<const StartNodeType> m_root; |
| 171 }; | 178 }; |
| 172 | 179 |
| 173 inline TraversalRange<TraversalChildrenIterator<NodeTraversal>> NodeTraversal::c
hildrenOf(const Node& parent) | 180 inline TraversalRange<TraversalChildrenIterator<NodeTraversal>> NodeTraversal::c
hildrenOf(const Node& parent) |
| 174 { | 181 { |
| 175 return TraversalRange<TraversalChildrenIterator<NodeTraversal>>(&parent); | 182 return TraversalRange<TraversalChildrenIterator<NodeTraversal>>(&parent); |
| 176 } | 183 } |
| 177 | 184 |
| 178 inline TraversalRange<TraversalDescendantIterator<NodeTraversal>> NodeTraversal:
:descendantsOf(const Node& root) | 185 inline TraversalRange<TraversalDescendantIterator<NodeTraversal>> NodeTraversal:
:descendantsOf(const Node& root) |
| 179 { | 186 { |
| 180 return TraversalRange<TraversalDescendantIterator<NodeTraversal>>(&root); | 187 return TraversalRange<TraversalDescendantIterator<NodeTraversal>>(&root); |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 { | 253 { |
| 247 Node* child = parent.firstChild(); | 254 Node* child = parent.firstChild(); |
| 248 while (child && index--) | 255 while (child && index--) |
| 249 child = child->nextSibling(); | 256 child = child->nextSibling(); |
| 250 return child; | 257 return child; |
| 251 } | 258 } |
| 252 | 259 |
| 253 } // namespace blink | 260 } // namespace blink |
| 254 | 261 |
| 255 #endif | 262 #endif |
| OLD | NEW |