1d1f58ab3742b8a0a220851b2c4a6573ffb2c001
[WebKit-https.git] / Source / WebCore / rendering / OrderIterator.h
1 /*
2  * Copyright (C) 2011 Google Inc. All rights reserved.
3  * Copyright (C) 2013 Igalia S.L. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met:
8  *
9  *     * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *     * Redistributions in binary form must reproduce the above
12  * copyright notice, this list of conditions and the following disclaimer
13  * in the documentation and/or other materials provided with the
14  * distribution.
15  *     * Neither the name of Google Inc. nor the names of its
16  * contributors may be used to endorse or promote products derived from
17  * this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  */
31
32 #ifndef OrderIterator_h
33 #define OrderIterator_h
34
35 #include <wtf/Noncopyable.h>
36 #include <wtf/Vector.h>
37
38 namespace WebCore {
39
40 class RenderBox;
41
42 class OrderIterator {
43 public:
44     friend class OrderIteratorPopulator;
45
46     RenderBox* currentChild() const;
47     RenderBox* first();
48     RenderBox* next();
49
50 private:
51     void reset();
52
53     Vector<std::pair<RenderBox*, int>> m_children;
54     size_t m_childrenIndex;
55 };
56
57 class OrderIteratorPopulator {
58 public:
59     OrderIteratorPopulator(OrderIterator& iterator)
60         : m_iterator(iterator)
61         , m_childIndex(0)
62         , m_allChildrenHaveDefaultOrderValue(true)
63     {
64         m_iterator.m_children.clear();
65     }
66
67     ~OrderIteratorPopulator();
68
69     void collectChild(RenderBox&);
70
71 private:
72     OrderIterator& m_iterator;
73     size_t m_childIndex;
74     bool m_allChildrenHaveDefaultOrderValue;
75 };
76
77 } // namespace WebCore
78
79 #endif //  OrderIterator_h