基於順序儲存實現的多叉樹(6):葉子遍歷
阿新 • • 發佈:2018-12-27
1 template<typename T> 2 template<bool is_const,bool is_reverse> 3 inline typename mtree<T,false>::template leaf_iterator_impl<is_const,is_reverse>& 4 mtree<T,false>::leaf_iterator_impl<is_const,is_reverse>::operator++()
5 {
6 increment(typename reverse_trait <is_reverse>::type());
7 return*this;
8 } 9 template<typename T>10 template<bool is_const,bool is_reverse>11 inline typename mtree<T,false>::template leaf_iterator_impl<is_const,is_reverse>&12 mtree<T,false>::leaf_iterator_impl<is_const,is_reverse >::operator--()
13 {
14 decrement(typename reverse_trait<is_reverse>::type());
15 return*this;
16 }17 template<typename T>18 template<bool is_const,bool is_reverse>19 inline typename mtree<T,false>::template leaf_iterator_impl<is_const,is_reverse >20 mtree<T,false>::leaf_iterator_impl<is_const,is_reverse>::operator++(int)
21 {
22 leaf_iterator_impl<is_const,is_reverse> iter(*this);
23 ++(*this);
24 return iter;
25 }26 template<typename T>27 template<bool is_const,bool is_reverse>28 inline typename mtree<T,false>::template leaf_iterator_impl<is_const,is_reverse>29 mtree<T,false>::leaf_iterator_impl<is_const,is_reverse>::operator--(int)
30 {
31 leaf_iterator_impl<is_const,is_reverse> iter(*this);
32 --(*this);
33 return iter;
34 }35 template<typename T>36 template<bool is_const,bool is_reverse>37 inline typename mtree<T,false>::template leaf_iterator_impl<is_const,is_reverse>38 mtree<T,false>::leaf_iterator_impl<is_const,is_reverse>::operator+ (size_t off)
39 {
40 leaf_iterator_impl<is_const,is_reverse> iter(*this);
41 iter += off;
42 return iter;
43 }44 template<typename T>45 template<bool is_const,bool is_reverse>46 inline typename mtree<T,false>::template leaf_iterator_impl<is_const,is_reverse>&47 mtree<T,false>::leaf_iterator_impl<is_const,is_reverse>::operator+= (size_t off)
48 {
49 while (off)
50 {
51 if (base_type::is_null()) break;
52 ++(*this); --off;
53 }54 return*this;
55 }56 template<typename T>57 template<bool is_const,bool is_reverse>58 inline typename mtree<T,false>::template leaf_iterator_impl<is_const,is_reverse>59 mtree<T,false>::leaf_iterator_impl<is_const,is_reverse>::operator- (size_t off)
60 {
61 leaf_iterator_impl<is_const,is_reverse> iter(*this);
62 iter -= off;
63 return iter;
64 }65 template<typename T>66 template<bool is_const,bool is_reverse>67 inline typename mtree<T,false>::template leaf_iterator_impl<is_const,is_reverse>&68 mtree<T,false>::leaf_iterator_impl<is_const,is_reverse>::operator-= (size_t off)
69 {
70 while (off)
71 {
72 if (base_type::is_null()) break;
73 --(*this); --off;
74 }75 return*this;
76 }77 template<typename T>78 template<bool is_const,bool is_reverse>79 inline typename mtree<T,false>::template leaf_iterator_impl<is_const,is_reverse>80 mtree<T,false>::leaf_iterator_impl<is_const,is_reverse>::begin() const81 {
82 leaf_iterator_impl<is_const,is_reverse> iter(*this);
83 iter.first(typename reverse_trait<is_reverse>::type());
84 return iter;
85 }86 template<typename T>87 template<bool is_const,bool is_reverse>88 inline typename mtree<T,false>::template leaf_iterator_impl<is_const,is_reverse>89 mtree<T,false>::leaf_iterator_impl<is_const,is_reverse>::end() const90 {
91 leaf_iterator_impl<is_const,is_reverse> iter(*this);
92 if(tree_)
93 {
94 iter.off_ = tree_->size();
95 }96 return iter;
97 }
5 {
6 increment(typename reverse_trait
7 return*this;
8 } 9 template<typename T>10 template<bool is_const,bool is_reverse>11 inline typename mtree<T,false>::template leaf_iterator_impl<is_const,is_reverse>&12 mtree<T,false>::leaf_iterator_impl<is_const,is_reverse
13 {
14 decrement(typename reverse_trait<is_reverse>::type());
15 return*this;
16 }17 template<typename T>18 template<bool is_const,bool is_reverse>19 inline typename mtree<T,false>::template leaf_iterator_impl<is_const,is_reverse
21 {
22 leaf_iterator_impl<is_const,is_reverse> iter(*this);
23 ++(*this);
24 return iter;
25 }26 template<typename T>27 template<bool is_const,bool is_reverse>28 inline typename mtree<T,false>::template leaf_iterator_impl<is_const,is_reverse>29 mtree<T,false>::leaf_iterator_impl<is_const,is_reverse>::operator--(int)
30 {
31 leaf_iterator_impl<is_const,is_reverse> iter(*this);
32 --(*this);
33 return iter;
34 }35 template<typename T>36 template<bool is_const,bool is_reverse>37 inline typename mtree<T,false>::template leaf_iterator_impl<is_const,is_reverse>38 mtree<T,false>::leaf_iterator_impl<is_const,is_reverse>::operator+ (size_t off)
39 {
40 leaf_iterator_impl<is_const,is_reverse> iter(*this);
41 iter += off;
42 return iter;
43 }44 template<typename T>45 template<bool is_const,bool is_reverse>46 inline typename mtree<T,false>::template leaf_iterator_impl<is_const,is_reverse>&47 mtree<T,false>::leaf_iterator_impl<is_const,is_reverse>::operator+= (size_t off)
48 {
49 while (off)
50 {
51 if (base_type::is_null()) break;
52 ++(*this); --off;
53 }54 return*this;
55 }56 template<typename T>57 template<bool is_const,bool is_reverse>58 inline typename mtree<T,false>::template leaf_iterator_impl<is_const,is_reverse>59 mtree<T,false>::leaf_iterator_impl<is_const,is_reverse>::operator- (size_t off)
60 {
61 leaf_iterator_impl<is_const,is_reverse> iter(*this);
62 iter -= off;
63 return iter;
64 }65 template<typename T>66 template<bool is_const,bool is_reverse>67 inline typename mtree<T,false>::template leaf_iterator_impl<is_const,is_reverse>&68 mtree<T,false>::leaf_iterator_impl<is_const,is_reverse>::operator-= (size_t off)
69 {
70 while (off)
71 {
72 if (base_type::is_null()) break;
73 --(*this); --off;
74 }75 return*this;
76 }77 template<typename T>78 template<bool is_const,bool is_reverse>79 inline typename mtree<T,false>::template leaf_iterator_impl<is_const,is_reverse>80 mtree<T,false>::leaf_iterator_impl<is_const,is_reverse>::begin() const81 {
82 leaf_iterator_impl<is_const,is_reverse> iter(*this);
83 iter.first(typename reverse_trait<is_reverse>::type());
84 return iter;
85 }86 template<typename T>87 template<bool is_const,bool is_reverse>88 inline typename mtree<T,false>::template leaf_iterator_impl<is_const,is_reverse>89 mtree<T,false>::leaf_iterator_impl<is_const,is_reverse>::end() const90 {
91 leaf_iterator_impl<is_const,is_reverse> iter(*this);
92 if(tree_)
93 {
94 iter.off_ = tree_->size();
95 }96 return iter;
97 }