• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef UI_EVENTS_EVENT_TARGET_ITERATOR_H_
6 #define UI_EVENTS_EVENT_TARGET_ITERATOR_H_
7 
8 #include <vector>
9 
10 namespace ui {
11 
12 class EventTarget;
13 
14 // An interface that allows iterating over a set of EventTargets.
15 class EventTargetIterator {
16  public:
~EventTargetIterator()17   virtual ~EventTargetIterator() {}
18   virtual EventTarget* GetNextTarget() = 0;
19 };
20 
21 // Provides an EventTargetIterator implementation for iterating over a list of
22 // EventTargets. The list is iterated in the reverse order, since typically the
23 // EventTargets are maintained in increasing z-order in the lists.
24 template<typename T>
25 class EventTargetIteratorImpl : public EventTargetIterator {
26  public:
EventTargetIteratorImpl(const std::vector<T * > & children)27   explicit EventTargetIteratorImpl(const std::vector<T*>& children)
28       : begin_(children.rbegin()),
29         end_(children.rend()) {
30   }
~EventTargetIteratorImpl()31   virtual ~EventTargetIteratorImpl() {}
32 
GetNextTarget()33   virtual EventTarget* GetNextTarget() OVERRIDE {
34     if (begin_ == end_)
35       return NULL;
36     EventTarget* target = *(begin_);
37     ++begin_;
38     return target;
39   }
40 
41  private:
42   typename std::vector<T*>::const_reverse_iterator begin_;
43   typename std::vector<T*>::const_reverse_iterator end_;
44 };
45 
46 }  // namespace ui
47 
48 #endif  // UI_EVENTS_EVENT_TARGET_ITERATOR_H_
49