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..990264a830484fbcb33d975dc15462169224fe4a 100644 |
| --- a/ui/events/event_target_iterator.h |
| +++ b/ui/events/event_target_iterator.h |
| @@ -28,9 +28,9 @@ 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; |
| EventTarget* target = *(begin_); |
| @@ -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()) { |
| + } |
| + ~CopyingEventTargetIteratorImpl() override {} |
| + |
| + EventTarget* GetNextTarget() override { |
| + if (begin_ == end_) |
| + return NULL; |
|
sky
2014/11/17 22:39:27
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_ |