1. 程式人生 > >基於順序儲存實現的多叉樹(6):葉子遍歷

基於順序儲存實現的多叉樹(6):葉子遍歷

 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    }