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..2adc62cd1f2941dcd67a81a64bbbcb14148ed159 100644 |
--- a/ui/events/event_target_iterator.h |
+++ b/ui/events/event_target_iterator.h |
@@ -43,6 +43,32 @@ 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()) { |
+ } |
+ virtual ~CopyingEventTargetIteratorImpl() {} |
sky
2014/11/14 01:43:57
nit: no virtual, just override.
|
+ |
+ virtual EventTarget* GetNextTarget() override { |
sky
2014/11/14 01:43:57
same thing, no virtual, just override.
|
+ if (begin_ == end_) |
+ return NULL; |
sky
2014/11/14 01:43:57
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_ |