Chromium Code Reviews| 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_ |