Index: ui/events/event_target_iterator.h |
diff --git a/ui/events/event_target_iterator.h b/ui/events/event_target_iterator.h |
index 28b4a30202a3fa2e29d1f32520188f2ac5bb06cb..1333475a951a472eae5b27cd869b230102899b04 100644 |
--- a/ui/events/event_target_iterator.h |
+++ b/ui/events/event_target_iterator.h |
@@ -28,11 +28,11 @@ class EventTargetIteratorImpl : public EventTargetIterator { |
: begin_(children.rbegin()), |
end_(children.rend()) { |
} |
- virtual ~EventTargetIteratorImpl() {} |
+ ~EventTargetIteratorImpl() override {} |
- virtual EventTarget* GetNextTarget() override { |
+ EventTarget* GetNextTarget() override { |
if (begin_ == end_) |
- return NULL; |
+ return nullptr; |
EventTarget* target = *(begin_); |
++begin_; |
return target; |
@@ -43,6 +43,31 @@ class EventTargetIteratorImpl : public EventTargetIterator { |
typename std::vector<T*>::const_reverse_iterator end_; |
}; |
+// Provides a version which keeps a copy of the data (for when it has to be |
+// derived instead of pointed at). |
+template <typename T> |
+class CopyingEventTargetIteratorImpl : public EventTargetIterator { |
+ public: |
+ explicit CopyingEventTargetIteratorImpl(const std::vector<T*>& children) |
+ : children_(children), |
+ begin_(children_.rbegin()), |
+ end_(children_.rend()) {} |
+ ~CopyingEventTargetIteratorImpl() override {} |
+ |
+ EventTarget* GetNextTarget() override { |
+ if (begin_ == end_) |
+ return nullptr; |
+ EventTarget* target = *(begin_); |
+ ++begin_; |
+ return target; |
+ } |
+ |
+ private: |
+ typename std::vector<T*> children_; |
+ typename std::vector<T*>::const_reverse_iterator begin_; |
+ typename std::vector<T*>::const_reverse_iterator end_; |
+}; |
+ |
} // namespace ui |
#endif // UI_EVENTS_EVENT_TARGET_ITERATOR_H_ |