Cogs.Core
iterators.h
1#ifndef LH_ITERATORS_H
2#define LH_ITERATORS_H
3
4#include "types.h"
5
6namespace litehtml
7{
8 class element;
9
11 {
12 public:
13 virtual bool select(const element::ptr& el) = 0;
14 };
15
17 {
18 private:
20 {
21 int idx;
22 element::ptr el;
24 {
25
26 }
27 stack_item(const stack_item& val)
28 {
29 idx = val.idx;
30 el = val.el;
31 }
33 {
34 idx = val.idx;
35 el = std::move(val.el);
36 }
37 };
38
39 std::vector<stack_item> m_stack;
40 element::ptr m_el;
41 int m_idx;
42 iterator_selector* m_go_inside;
43 iterator_selector* m_select;
44 public:
45
46 elements_iterator(const element::ptr& el, iterator_selector* go_inside, iterator_selector* select)
47 {
48 m_el = el;
49 m_idx = -1;
50 m_go_inside = go_inside;
51 m_select = select;
52 }
53
55 {
56
57 }
58
59 element::ptr next(bool ret_parent = true);
60
61 private:
62 void next_idx();
63 };
64
66 {
67 public:
68 virtual bool select(const element::ptr& el);
69 };
70
72 {
73 public:
74 virtual bool select(const element::ptr& el);
75 };
76
78 {
79 public:
80 virtual bool select(const element::ptr& el);
81 };
82
84 {
85 public:
86 virtual bool select(const element::ptr& el);
87 };
88}
89
90#endif // LH_ITERATORS_H