76
72
<a name="l00090"></a>00090 };
77
73
<a name="l00091"></a>00091
78
74
<a name="l00093"></a>00093 <span class="keyword">template</span><<span class="keyword">class</span> T>
79
<a name="l00094"></a><a class="code" href="classtree__node__.html">00094</a> <span class="keyword">class </span><a class="code" href="classtree__node__.html">tree_node_</a> { <span class="comment">// size: 5*4=20 bytes (on 32 bit arch), can be reduced by 8.</span>
75
<a name="l00094"></a><a class="code" href="classtree__node__.html">00094</a> <span class="keyword">class </span><a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node_</a> { <span class="comment">// size: 5*4=20 bytes (on 32 bit arch), can be reduced by 8.</span>
80
76
<a name="l00095"></a>00095 <span class="keyword">public</span>:
81
<a name="l00096"></a><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">00096</a> <a class="code" href="classtree__node__.html">tree_node_<T></a> *<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>;
82
<a name="l00097"></a><a class="code" href="classtree__node__.html#f8b222dacdcdf6ca9f24f7a410e36f20">00097</a> <a class="code" href="classtree__node__.html">tree_node_<T></a> *<a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>, *<a class="code" href="classtree__node__.html#f8b222dacdcdf6ca9f24f7a410e36f20">last_child</a>;
83
<a name="l00098"></a><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">00098</a> <a class="code" href="classtree__node__.html">tree_node_<T></a> *<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>, *<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
84
<a name="l00099"></a><a class="code" href="classtree__node__.html#ec3d00d908b82e0d429a431e566fed95">00099</a> T <a class="code" href="classtree__node__.html#ec3d00d908b82e0d429a431e566fed95">data</a>;
77
<a name="l00096"></a><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">00096</a> <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node_<T></a> *<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>;
78
<a name="l00097"></a><a class="code" href="classtree__node__.html#611d3c41c716dae6bf2012e3d9152933">00097</a> <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node_<T></a> *<a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>, *<a class="code" href="classtree__node__.html#611d3c41c716dae6bf2012e3d9152933">last_child</a>;
79
<a name="l00098"></a><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">00098</a> <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node_<T></a> *<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>, *<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
80
<a name="l00099"></a><a class="code" href="classtree__node__.html#4c15077a3ad0552413d1268ee4be1bef">00099</a> T <a class="code" href="classtree__node__.html#4c15077a3ad0552413d1268ee4be1bef">data</a>;
85
81
<a name="l00100"></a>00100 }; <span class="comment">// __attribute__((packed));</span>
86
82
<a name="l00101"></a>00101
87
83
<a name="l00102"></a>00102 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator = std::allocator<tree_node_<T> > >
88
84
<a name="l00103"></a><a class="code" href="classtree.html">00103</a> <span class="keyword">class </span><a class="code" href="classtree.html">tree</a> {
89
85
<a name="l00104"></a>00104 <span class="keyword">protected</span>:
90
<a name="l00105"></a><a class="code" href="classtree.html#ce325844a601660acbe7687991f8a225">00105</a> <span class="keyword">typedef</span> <a class="code" href="classtree__node__.html">tree_node_<T></a> <a class="code" href="classtree__node__.html">tree_node</a>;
86
<a name="l00105"></a><a class="code" href="classtree.html#672d078d87ae97c58b732a940d7b8ca8">00105</a> <span class="keyword">typedef</span> <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node_<T></a> <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a>;
91
87
<a name="l00106"></a>00106 <span class="keyword">public</span>:
92
<a name="l00108"></a><a class="code" href="classtree.html#6e12b3e8e7e08b824ea27a9ca7fa49da">00108</a> <span class="keyword">typedef</span> T <a class="code" href="classOfxGenericContainer.html">value_type</a>;
88
<a name="l00108"></a><a class="code" href="classtree.html#1e7bcd21e7420f7922a1bca79080acfa">00108</a> <span class="keyword">typedef</span> T <a class="code" href="classOfxGenericContainer.html" title="A generic container for an OFX SGML element. Every container inherits from OfxGenericContainer...">value_type</a>;
93
89
<a name="l00109"></a>00109
94
90
<a name="l00110"></a>00110 <span class="keyword">class </span>iterator_base;
95
91
<a name="l00111"></a>00111 <span class="keyword">class </span>pre_order_iterator;
96
92
<a name="l00112"></a>00112 <span class="keyword">class </span>post_order_iterator;
97
93
<a name="l00113"></a>00113 <span class="keyword">class </span>sibling_iterator;
98
94
<a name="l00114"></a>00114
99
<a name="l00115"></a>00115 <a class="code" href="classtree.html#29428ae7d18d30bc26dce69586736f6e">tree</a>();
100
<a name="l00116"></a>00116 <a class="code" href="classtree.html#29428ae7d18d30bc26dce69586736f6e">tree</a>(<span class="keyword">const</span> T&);
101
<a name="l00117"></a>00117 <a class="code" href="classtree.html#29428ae7d18d30bc26dce69586736f6e">tree</a>(<span class="keyword">const</span> iterator_base&);
102
<a name="l00118"></a>00118 <a class="code" href="classtree.html#29428ae7d18d30bc26dce69586736f6e">tree</a>(<span class="keyword">const</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator></a>&);
103
<a name="l00119"></a>00119 <a class="code" href="classtree.html#f00c3b34857694f4d02894b308b50e4b">~tree</a>();
104
<a name="l00120"></a>00120 <span class="keywordtype">void</span> <a class="code" href="classtree.html#d6defe76c212f37bba54135643e4955f">operator=</a>(<span class="keyword">const</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator></a>&);
95
<a name="l00115"></a>00115 <a class="code" href="classtree.html#a064a1d9dceac9b918c5247919a4a325">tree</a>();
96
<a name="l00116"></a>00116 <a class="code" href="classtree.html#a064a1d9dceac9b918c5247919a4a325">tree</a>(<span class="keyword">const</span> T&);
97
<a name="l00117"></a>00117 <a class="code" href="classtree.html#a064a1d9dceac9b918c5247919a4a325">tree</a>(<span class="keyword">const</span> iterator_base&);
98
<a name="l00118"></a>00118 <a class="code" href="classtree.html#a064a1d9dceac9b918c5247919a4a325">tree</a>(<span class="keyword">const</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator></a>&);
99
<a name="l00119"></a>00119 <a class="code" href="classtree.html#f0169b515c95f4299fd2d984137b7868">~tree</a>();
100
<a name="l00120"></a>00120 <span class="keywordtype">void</span> <a class="code" href="classtree.html#9561c0c73b0605f32bf82a026eaf216a">operator=</a>(<span class="keyword">const</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator></a>&);
105
101
<a name="l00121"></a>00121
106
102
<a name="l00123"></a>00123 <span class="preprocessor">#ifdef __SGI_STL_PORT</span>
107
103
<a name="l00124"></a>00124 <span class="preprocessor"></span> <span class="keyword">class </span>iterator_base : <span class="keyword">public</span> stlport::bidirectional_iterator<T, ptrdiff_t> {
108
104
<a name="l00125"></a>00125 <span class="preprocessor">#else</span>
109
<a name="l00126"></a><a class="code" href="classtree_1_1iterator__base.html">00126</a> <span class="preprocessor"></span> <span class="keyword">class </span><a class="code" href="classtree_1_1iterator__base.html">iterator_base</a> {
105
<a name="l00126"></a><a class="code" href="classtree_1_1iterator__base.html">00126</a> <span class="preprocessor"></span> <span class="keyword">class </span><a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a> {
110
106
<a name="l00127"></a>00127 <span class="preprocessor">#endif</span>
111
107
<a name="l00128"></a>00128 <span class="preprocessor"></span> <span class="keyword">public</span>:
112
<a name="l00129"></a><a class="code" href="classtree_1_1iterator__base.html#4e4ebb94593d3fb0557b5826efffbb22">00129</a> <span class="keyword">typedef</span> T <a class="code" href="classtree.html#6e12b3e8e7e08b824ea27a9ca7fa49da">value_type</a>;
113
<a name="l00130"></a><a class="code" href="classtree_1_1iterator__base.html#da03d0e3df9658b06bfaff826688cc7e">00130</a> <span class="keyword">typedef</span> T* pointer;
114
<a name="l00131"></a><a class="code" href="classtree_1_1iterator__base.html#35ff9b8029f33c2e0469bad23764f9d2">00131</a> <span class="keyword">typedef</span> T& reference;
115
<a name="l00132"></a><a class="code" href="classtree_1_1iterator__base.html#4976a767b9690e1cd1e22282baef899f">00132</a> <span class="keyword">typedef</span> size_t size_type;
116
<a name="l00133"></a><a class="code" href="classtree_1_1iterator__base.html#ebbd8db196719de8eff9735650c352df">00133</a> <span class="keyword">typedef</span> ptrdiff_t difference_type;
117
<a name="l00134"></a><a class="code" href="classtree_1_1iterator__base.html#42e7358332b27206caab9be4a1000591">00134</a> <span class="keyword">typedef</span> std::bidirectional_iterator_tag iterator_category;
108
<a name="l00129"></a><a class="code" href="classtree_1_1iterator__base.html#ab430bec9e607ae24cdd2bdffe3faf70">00129</a> <span class="keyword">typedef</span> T <a class="code" href="classtree_1_1iterator__base.html#ab430bec9e607ae24cdd2bdffe3faf70">value_type</a>;
109
<a name="l00130"></a><a class="code" href="classtree_1_1iterator__base.html#0665bed45269b6f7b97809ea9920008e">00130</a> <span class="keyword">typedef</span> T* <a class="code" href="classtree_1_1iterator__base.html#0665bed45269b6f7b97809ea9920008e">pointer</a>;
110
<a name="l00131"></a><a class="code" href="classtree_1_1iterator__base.html#063faf883017de195e7e72cf55be6914">00131</a> <span class="keyword">typedef</span> T& <a class="code" href="classtree_1_1iterator__base.html#063faf883017de195e7e72cf55be6914">reference</a>;
111
<a name="l00132"></a><a class="code" href="classtree_1_1iterator__base.html#a2b239ac4db713d5b191e696584a9076">00132</a> <span class="keyword">typedef</span> <span class="keywordtype">size_t</span> <a class="code" href="classtree_1_1iterator__base.html#a2b239ac4db713d5b191e696584a9076">size_type</a>;
112
<a name="l00133"></a><a class="code" href="classtree_1_1iterator__base.html#eff66472181aa05d50c7ffe4a91dc4c0">00133</a> <span class="keyword">typedef</span> ptrdiff_t <a class="code" href="classtree_1_1iterator__base.html#eff66472181aa05d50c7ffe4a91dc4c0">difference_type</a>;
113
<a name="l00134"></a><a class="code" href="classtree_1_1iterator__base.html#7d0ace14418254eaab7526f1d0aabf40">00134</a> <span class="keyword">typedef</span> std::bidirectional_iterator_tag <a class="code" href="classtree_1_1iterator__base.html#7d0ace14418254eaab7526f1d0aabf40">iterator_category</a>;
118
114
<a name="l00135"></a>00135
119
<a name="l00136"></a>00136 <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>();
120
<a name="l00137"></a>00137 <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>(<a class="code" href="classtree__node__.html">tree_node</a> *);
115
<a name="l00136"></a>00136 <a class="code" href="classtree_1_1iterator__base.html#1be2e6802acca5f281ddc7e5d67bd61c">iterator_base</a>();
116
<a name="l00137"></a>00137 <a class="code" href="classtree_1_1iterator__base.html#1be2e6802acca5f281ddc7e5d67bd61c">iterator_base</a>(<a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *);
121
117
<a name="l00138"></a>00138
122
<a name="l00139"></a>00139 T& operator*() <span class="keyword">const</span>;
123
<a name="l00140"></a>00140 T* operator->() <span class="keyword">const</span>;
118
<a name="l00139"></a>00139 T& <a class="code" href="classtree_1_1iterator__base.html#ada7cbe4d4f9a5ec29db78d10712edc6">operator*</a>() <span class="keyword">const</span>;
119
<a name="l00140"></a>00140 T* <a class="code" href="classtree_1_1iterator__base.html#bd9c59569df7d8be5a50c835c180f4dc">operator-></a>() <span class="keyword">const</span>;
124
120
<a name="l00141"></a>00141
125
<a name="l00143"></a>00143 <span class="keywordtype">void</span> skip_children();
126
<a name="l00145"></a>00145 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classtree.html#9e33e1e03c74f7fd67d0c8ab1b014f70">number_of_children</a>() <span class="keyword">const</span>;
121
<a name="l00143"></a>00143 <span class="keywordtype">void</span> <a class="code" href="classtree_1_1iterator__base.html#a0be7989b9dd4c5bcdcc0d47a56d11fb" title="When called, the next increment/decrement skips children of this node.">skip_children</a>();
122
<a name="l00145"></a>00145 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classtree_1_1iterator__base.html#435004214270928d106dd4c8f6a36f17" title="Number of children of the node pointed to by the iterator.">number_of_children</a>() <span class="keyword">const</span>;
127
123
<a name="l00146"></a>00146
128
<a name="l00147"></a>00147 <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> <a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">begin</a>() <span class="keyword">const</span>;
129
<a name="l00148"></a>00148 <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> <a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">end</a>() <span class="keyword">const</span>;
124
<a name="l00147"></a>00147 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> <a class="code" href="classtree_1_1iterator__base.html#7fad2f6cc1a6a667b5c71bb16c9b84e5">begin</a>() <span class="keyword">const</span>;
125
<a name="l00148"></a>00148 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> <a class="code" href="classtree_1_1iterator__base.html#399dabd62f0659c02bfda59b26bdeefe">end</a>() <span class="keyword">const</span>;
130
126
<a name="l00149"></a>00149
131
<a name="l00150"></a><a class="code" href="classtree_1_1iterator__base.html#a3aa82cf685e610fad186b419930535b">00150</a> <a class="code" href="classtree__node__.html">tree_node</a> *node;
127
<a name="l00150"></a><a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">00150</a> <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>;
132
128
<a name="l00151"></a>00151 <span class="keyword">protected</span>:
133
<a name="l00152"></a><a class="code" href="classtree_1_1iterator__base.html#dc8121d0962f718bc628b325de66bb4f">00152</a> <span class="keywordtype">bool</span> skip_current_children_;
129
<a name="l00152"></a><a class="code" href="classtree_1_1iterator__base.html#88239267268c728952e0cd89b9326e82">00152</a> <span class="keywordtype">bool</span> <a class="code" href="classtree_1_1iterator__base.html#88239267268c728952e0cd89b9326e82">skip_current_children_</a>;
134
130
<a name="l00153"></a>00153 };
135
131
<a name="l00154"></a>00154
136
<a name="l00156"></a><a class="code" href="classtree_1_1pre__order__iterator.html">00156</a> <span class="keyword">class </span><a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a> : <span class="keyword">public</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a> {
132
<a name="l00156"></a><a class="code" href="classtree_1_1pre__order__iterator.html">00156</a> <span class="keyword">class </span><a class="code" href="classtree_1_1pre__order__iterator.html" title="Depth-first iterator, first accessing the node, then its children.">pre_order_iterator</a> : <span class="keyword">public</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a> {
137
133
<a name="l00157"></a>00157 <span class="keyword">public</span>:
138
<a name="l00158"></a>00158 <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a>();
139
<a name="l00159"></a>00159 <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a>(<a class="code" href="classtree__node__.html">tree_node</a> *);
140
<a name="l00160"></a>00160 <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&);
141
<a name="l00161"></a>00161 <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a>&);
134
<a name="l00158"></a>00158 <a class="code" href="classtree_1_1pre__order__iterator.html" title="Depth-first iterator, first accessing the node, then its children.">pre_order_iterator</a>();
135
<a name="l00159"></a>00159 <a class="code" href="classtree_1_1pre__order__iterator.html" title="Depth-first iterator, first accessing the node, then its children.">pre_order_iterator</a>(<a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *);
136
<a name="l00160"></a>00160 <a class="code" href="classtree_1_1pre__order__iterator.html" title="Depth-first iterator, first accessing the node, then its children.">pre_order_iterator</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>&);
137
<a name="l00161"></a>00161 <a class="code" href="classtree_1_1pre__order__iterator.html" title="Depth-first iterator, first accessing the node, then its children.">pre_order_iterator</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a>&);
142
138
<a name="l00162"></a>00162
143
<a name="l00163"></a>00163 <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a>&) <span class="keyword">const</span>;
144
<a name="l00164"></a>00164 <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a>&) <span class="keyword">const</span>;
145
<a name="l00165"></a>00165 <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a>& operator++();
146
<a name="l00166"></a>00166 <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a>& operator--();
147
<a name="l00167"></a>00167 <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a> operator++(<span class="keywordtype">int</span>);
148
<a name="l00168"></a>00168 <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a> operator--(<span class="keywordtype">int</span>);
149
<a name="l00169"></a>00169 <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a>& operator+=(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>);
150
<a name="l00170"></a>00170 <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a>& operator-=(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>);
139
<a name="l00163"></a>00163 <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> <a class="code" href="classtree_1_1pre__order__iterator.html" title="Depth-first iterator, first accessing the node, then its children.">pre_order_iterator</a>&) <span class="keyword">const</span>;
140
<a name="l00164"></a>00164 <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> <a class="code" href="classtree_1_1pre__order__iterator.html" title="Depth-first iterator, first accessing the node, then its children.">pre_order_iterator</a>&) <span class="keyword">const</span>;
141
<a name="l00165"></a>00165 <a class="code" href="classtree_1_1pre__order__iterator.html" title="Depth-first iterator, first accessing the node, then its children.">pre_order_iterator</a>& operator++();
142
<a name="l00166"></a>00166 <a class="code" href="classtree_1_1pre__order__iterator.html" title="Depth-first iterator, first accessing the node, then its children.">pre_order_iterator</a>& operator--();
143
<a name="l00167"></a>00167 <a class="code" href="classtree_1_1pre__order__iterator.html" title="Depth-first iterator, first accessing the node, then its children.">pre_order_iterator</a> operator++(<span class="keywordtype">int</span>);
144
<a name="l00168"></a>00168 <a class="code" href="classtree_1_1pre__order__iterator.html" title="Depth-first iterator, first accessing the node, then its children.">pre_order_iterator</a> operator--(<span class="keywordtype">int</span>);
145
<a name="l00169"></a>00169 <a class="code" href="classtree_1_1pre__order__iterator.html" title="Depth-first iterator, first accessing the node, then its children.">pre_order_iterator</a>& operator+=(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>);
146
<a name="l00170"></a>00170 <a class="code" href="classtree_1_1pre__order__iterator.html" title="Depth-first iterator, first accessing the node, then its children.">pre_order_iterator</a>& operator-=(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>);
151
147
<a name="l00171"></a>00171 };
152
148
<a name="l00172"></a>00172
153
<a name="l00174"></a><a class="code" href="classtree_1_1post__order__iterator.html">00174</a> <span class="keyword">class </span><a class="code" href="classtree_1_1post__order__iterator.html">post_order_iterator</a> : <span class="keyword">public</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a> {
149
<a name="l00174"></a><a class="code" href="classtree_1_1post__order__iterator.html">00174</a> <span class="keyword">class </span><a class="code" href="classtree_1_1post__order__iterator.html" title="Depth-first iterator, first accessing the children, then the node itself.">post_order_iterator</a> : <span class="keyword">public</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a> {
154
150
<a name="l00175"></a>00175 <span class="keyword">public</span>:
155
<a name="l00176"></a>00176 <a class="code" href="classtree_1_1post__order__iterator.html">post_order_iterator</a>();
156
<a name="l00177"></a>00177 <a class="code" href="classtree_1_1post__order__iterator.html">post_order_iterator</a>(<a class="code" href="classtree__node__.html">tree_node</a> *);
157
<a name="l00178"></a>00178 <a class="code" href="classtree_1_1post__order__iterator.html">post_order_iterator</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&);
158
<a name="l00179"></a>00179 <a class="code" href="classtree_1_1post__order__iterator.html">post_order_iterator</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a>&);
151
<a name="l00176"></a>00176 <a class="code" href="classtree_1_1post__order__iterator.html" title="Depth-first iterator, first accessing the children, then the node itself.">post_order_iterator</a>();
152
<a name="l00177"></a>00177 <a class="code" href="classtree_1_1post__order__iterator.html" title="Depth-first iterator, first accessing the children, then the node itself.">post_order_iterator</a>(<a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *);
153
<a name="l00178"></a>00178 <a class="code" href="classtree_1_1post__order__iterator.html" title="Depth-first iterator, first accessing the children, then the node itself.">post_order_iterator</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>&);
154
<a name="l00179"></a>00179 <a class="code" href="classtree_1_1post__order__iterator.html" title="Depth-first iterator, first accessing the children, then the node itself.">post_order_iterator</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a>&);
159
155
<a name="l00180"></a>00180
160
<a name="l00181"></a>00181 <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> <a class="code" href="classtree_1_1post__order__iterator.html">post_order_iterator</a>&) <span class="keyword">const</span>;
161
<a name="l00182"></a>00182 <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> <a class="code" href="classtree_1_1post__order__iterator.html">post_order_iterator</a>&) <span class="keyword">const</span>;
162
<a name="l00183"></a>00183 <a class="code" href="classtree_1_1post__order__iterator.html">post_order_iterator</a>& operator++();
163
<a name="l00184"></a>00184 <a class="code" href="classtree_1_1post__order__iterator.html">post_order_iterator</a>& operator--();
164
<a name="l00185"></a>00185 <a class="code" href="classtree_1_1post__order__iterator.html">post_order_iterator</a> operator++(<span class="keywordtype">int</span>);
165
<a name="l00186"></a>00186 <a class="code" href="classtree_1_1post__order__iterator.html">post_order_iterator</a> operator--(<span class="keywordtype">int</span>);
166
<a name="l00187"></a>00187 <a class="code" href="classtree_1_1post__order__iterator.html">post_order_iterator</a>& operator+=(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>);
167
<a name="l00188"></a>00188 <a class="code" href="classtree_1_1post__order__iterator.html">post_order_iterator</a>& operator-=(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>);
156
<a name="l00181"></a>00181 <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> <a class="code" href="classtree_1_1post__order__iterator.html" title="Depth-first iterator, first accessing the children, then the node itself.">post_order_iterator</a>&) <span class="keyword">const</span>;
157
<a name="l00182"></a>00182 <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> <a class="code" href="classtree_1_1post__order__iterator.html" title="Depth-first iterator, first accessing the children, then the node itself.">post_order_iterator</a>&) <span class="keyword">const</span>;
158
<a name="l00183"></a>00183 <a class="code" href="classtree_1_1post__order__iterator.html" title="Depth-first iterator, first accessing the children, then the node itself.">post_order_iterator</a>& operator++();
159
<a name="l00184"></a>00184 <a class="code" href="classtree_1_1post__order__iterator.html" title="Depth-first iterator, first accessing the children, then the node itself.">post_order_iterator</a>& operator--();
160
<a name="l00185"></a>00185 <a class="code" href="classtree_1_1post__order__iterator.html" title="Depth-first iterator, first accessing the children, then the node itself.">post_order_iterator</a> operator++(<span class="keywordtype">int</span>);
161
<a name="l00186"></a>00186 <a class="code" href="classtree_1_1post__order__iterator.html" title="Depth-first iterator, first accessing the children, then the node itself.">post_order_iterator</a> operator--(<span class="keywordtype">int</span>);
162
<a name="l00187"></a>00187 <a class="code" href="classtree_1_1post__order__iterator.html" title="Depth-first iterator, first accessing the children, then the node itself.">post_order_iterator</a>& operator+=(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>);
163
<a name="l00188"></a>00188 <a class="code" href="classtree_1_1post__order__iterator.html" title="Depth-first iterator, first accessing the children, then the node itself.">post_order_iterator</a>& operator-=(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>);
168
164
<a name="l00189"></a>00189
169
165
<a name="l00191"></a>00191 <span class="keywordtype">void</span> descend_all();
170
166
<a name="l00192"></a>00192 };
171
167
<a name="l00193"></a>00193
172
<a name="l00195"></a><a class="code" href="classtree.html#7e3cc3f2e7a5fb4edd554c9978642c29">00195</a> <span class="keyword">typedef</span> pre_order_iterator <a class="code" href="classtree.html#7e3cc3f2e7a5fb4edd554c9978642c29">iterator</a>;
168
<a name="l00195"></a><a class="code" href="classtree.html#2079982538b88d21fe1ccea34fe7ce0e">00195</a> <span class="keyword">typedef</span> pre_order_iterator <a class="code" href="classtree.html#2079982538b88d21fe1ccea34fe7ce0e" title="The default iterator type throughout the tree class.">iterator</a>;
173
169
<a name="l00196"></a>00196
174
<a name="l00198"></a><a class="code" href="classtree_1_1fixed__depth__iterator.html">00198</a> <span class="keyword">class </span><a class="code" href="classtree_1_1fixed__depth__iterator.html">fixed_depth_iterator</a> : <span class="keyword">public</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a> {
170
<a name="l00198"></a><a class="code" href="classtree_1_1fixed__depth__iterator.html">00198</a> <span class="keyword">class </span><a class="code" href="classtree_1_1fixed__depth__iterator.html" title="Iterator which traverses only the nodes at a given depth from the root.">fixed_depth_iterator</a> : <span class="keyword">public</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a> {
175
171
<a name="l00199"></a>00199 <span class="keyword">public</span>:
176
<a name="l00200"></a>00200 <a class="code" href="classtree_1_1fixed__depth__iterator.html">fixed_depth_iterator</a>();
177
<a name="l00201"></a>00201 <a class="code" href="classtree_1_1fixed__depth__iterator.html">fixed_depth_iterator</a>(<a class="code" href="classtree__node__.html">tree_node</a> *);
178
<a name="l00202"></a>00202 <a class="code" href="classtree_1_1fixed__depth__iterator.html">fixed_depth_iterator</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&);
179
<a name="l00203"></a>00203 <a class="code" href="classtree_1_1fixed__depth__iterator.html">fixed_depth_iterator</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a>&);
180
<a name="l00204"></a>00204 <a class="code" href="classtree_1_1fixed__depth__iterator.html">fixed_depth_iterator</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1fixed__depth__iterator.html">fixed_depth_iterator</a>&);
172
<a name="l00200"></a>00200 <a class="code" href="classtree_1_1fixed__depth__iterator.html" title="Iterator which traverses only the nodes at a given depth from the root.">fixed_depth_iterator</a>();
173
<a name="l00201"></a>00201 <a class="code" href="classtree_1_1fixed__depth__iterator.html" title="Iterator which traverses only the nodes at a given depth from the root.">fixed_depth_iterator</a>(<a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *);
174
<a name="l00202"></a>00202 <a class="code" href="classtree_1_1fixed__depth__iterator.html" title="Iterator which traverses only the nodes at a given depth from the root.">fixed_depth_iterator</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>&);
175
<a name="l00203"></a>00203 <a class="code" href="classtree_1_1fixed__depth__iterator.html" title="Iterator which traverses only the nodes at a given depth from the root.">fixed_depth_iterator</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a>&);
176
<a name="l00204"></a>00204 <a class="code" href="classtree_1_1fixed__depth__iterator.html" title="Iterator which traverses only the nodes at a given depth from the root.">fixed_depth_iterator</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1fixed__depth__iterator.html" title="Iterator which traverses only the nodes at a given depth from the root.">fixed_depth_iterator</a>&);
181
177
<a name="l00205"></a>00205
182
<a name="l00206"></a>00206 <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> <a class="code" href="classtree_1_1fixed__depth__iterator.html">fixed_depth_iterator</a>&) <span class="keyword">const</span>;
183
<a name="l00207"></a>00207 <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> <a class="code" href="classtree_1_1fixed__depth__iterator.html">fixed_depth_iterator</a>&) <span class="keyword">const</span>;
184
<a name="l00208"></a>00208 <a class="code" href="classtree_1_1fixed__depth__iterator.html">fixed_depth_iterator</a>& operator++();
185
<a name="l00209"></a>00209 <a class="code" href="classtree_1_1fixed__depth__iterator.html">fixed_depth_iterator</a>& operator--();
186
<a name="l00210"></a>00210 <a class="code" href="classtree_1_1fixed__depth__iterator.html">fixed_depth_iterator</a> operator++(<span class="keywordtype">int</span>);
187
<a name="l00211"></a>00211 <a class="code" href="classtree_1_1fixed__depth__iterator.html">fixed_depth_iterator</a> operator--(<span class="keywordtype">int</span>);
188
<a name="l00212"></a>00212 <a class="code" href="classtree_1_1fixed__depth__iterator.html">fixed_depth_iterator</a>& operator+=(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>);
189
<a name="l00213"></a>00213 <a class="code" href="classtree_1_1fixed__depth__iterator.html">fixed_depth_iterator</a>& operator-=(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>);
178
<a name="l00206"></a>00206 <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> <a class="code" href="classtree_1_1fixed__depth__iterator.html" title="Iterator which traverses only the nodes at a given depth from the root.">fixed_depth_iterator</a>&) <span class="keyword">const</span>;
179
<a name="l00207"></a>00207 <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> <a class="code" href="classtree_1_1fixed__depth__iterator.html" title="Iterator which traverses only the nodes at a given depth from the root.">fixed_depth_iterator</a>&) <span class="keyword">const</span>;
180
<a name="l00208"></a>00208 <a class="code" href="classtree_1_1fixed__depth__iterator.html" title="Iterator which traverses only the nodes at a given depth from the root.">fixed_depth_iterator</a>& operator++();
181
<a name="l00209"></a>00209 <a class="code" href="classtree_1_1fixed__depth__iterator.html" title="Iterator which traverses only the nodes at a given depth from the root.">fixed_depth_iterator</a>& operator--();
182
<a name="l00210"></a>00210 <a class="code" href="classtree_1_1fixed__depth__iterator.html" title="Iterator which traverses only the nodes at a given depth from the root.">fixed_depth_iterator</a> operator++(<span class="keywordtype">int</span>);
183
<a name="l00211"></a>00211 <a class="code" href="classtree_1_1fixed__depth__iterator.html" title="Iterator which traverses only the nodes at a given depth from the root.">fixed_depth_iterator</a> operator--(<span class="keywordtype">int</span>);
184
<a name="l00212"></a>00212 <a class="code" href="classtree_1_1fixed__depth__iterator.html" title="Iterator which traverses only the nodes at a given depth from the root.">fixed_depth_iterator</a>& operator+=(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>);
185
<a name="l00213"></a>00213 <a class="code" href="classtree_1_1fixed__depth__iterator.html" title="Iterator which traverses only the nodes at a given depth from the root.">fixed_depth_iterator</a>& operator-=(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>);
190
186
<a name="l00214"></a>00214
191
<a name="l00215"></a><a class="code" href="classtree_1_1fixed__depth__iterator.html#7571c412f3df322bbdb1411960532e93">00215</a> <a class="code" href="classtree__node__.html">tree_node</a> *first_parent_;
187
<a name="l00215"></a><a class="code" href="classtree_1_1fixed__depth__iterator.html#5f6c92f12c4281e94e950ccd70833985">00215</a> <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *first_parent_;
192
188
<a name="l00216"></a>00216 <span class="keyword">private</span>:
193
189
<a name="l00217"></a>00217 <span class="keywordtype">void</span> set_first_parent_();
194
190
<a name="l00218"></a>00218 <span class="keywordtype">void</span> find_leftmost_parent_();
195
191
<a name="l00219"></a>00219 };
196
192
<a name="l00220"></a>00220
197
<a name="l00222"></a><a class="code" href="classtree_1_1sibling__iterator.html">00222</a> <span class="keyword">class </span><a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> : <span class="keyword">public</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a> {
193
<a name="l00222"></a><a class="code" href="classtree_1_1sibling__iterator.html">00222</a> <span class="keyword">class </span><a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> : <span class="keyword">public</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a> {
198
194
<a name="l00223"></a>00223 <span class="keyword">public</span>:
199
<a name="l00224"></a>00224 <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a>();
200
<a name="l00225"></a>00225 <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a>(<a class="code" href="classtree__node__.html">tree_node</a> *);
201
<a name="l00226"></a>00226 <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a>&);
202
<a name="l00227"></a>00227 <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&);
195
<a name="l00224"></a>00224 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a>();
196
<a name="l00225"></a>00225 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a>(<a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *);
197
<a name="l00226"></a>00226 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a>&);
198
<a name="l00227"></a>00227 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>&);
203
199
<a name="l00228"></a>00228
204
<a name="l00229"></a>00229 <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a>&) <span class="keyword">const</span>;
205
<a name="l00230"></a>00230 <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a>&) <span class="keyword">const</span>;
206
<a name="l00231"></a>00231 <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a>& operator++();
207
<a name="l00232"></a>00232 <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a>& operator--();
208
<a name="l00233"></a>00233 <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> operator++(<span class="keywordtype">int</span>);
209
<a name="l00234"></a>00234 <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> operator--(<span class="keywordtype">int</span>);
210
<a name="l00235"></a>00235 <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a>& operator+=(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>);
211
<a name="l00236"></a>00236 <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a>& operator-=(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>);
200
<a name="l00229"></a>00229 <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a>&) <span class="keyword">const</span>;
201
<a name="l00230"></a>00230 <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a>&) <span class="keyword">const</span>;
202
<a name="l00231"></a>00231 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a>& operator++();
203
<a name="l00232"></a>00232 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a>& operator--();
204
<a name="l00233"></a>00233 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> operator++(<span class="keywordtype">int</span>);
205
<a name="l00234"></a>00234 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> operator--(<span class="keywordtype">int</span>);
206
<a name="l00235"></a>00235 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a>& operator+=(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>);
207
<a name="l00236"></a>00236 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a>& operator-=(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>);
212
208
<a name="l00237"></a>00237
213
<a name="l00238"></a>00238 <a class="code" href="classtree__node__.html">tree_node</a> *range_first() <span class="keyword">const</span>;
214
<a name="l00239"></a>00239 <a class="code" href="classtree__node__.html">tree_node</a> *range_last() <span class="keyword">const</span>;
215
<a name="l00240"></a><a class="code" href="classtree_1_1sibling__iterator.html#605ea84e128041819927947e219e021f">00240</a> <a class="code" href="classtree__node__.html">tree_node</a> *parent_;
209
<a name="l00238"></a>00238 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *range_first() <span class="keyword">const</span>;
210
<a name="l00239"></a>00239 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *range_last() <span class="keyword">const</span>;
211
<a name="l00240"></a><a class="code" href="classtree_1_1sibling__iterator.html#204f7449ee908f982d21cc3d334d25bc">00240</a> <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *parent_;
216
212
<a name="l00241"></a>00241 <span class="keyword">private</span>:
217
213
<a name="l00242"></a>00242 <span class="keywordtype">void</span> set_parent_();
218
214
<a name="l00243"></a>00243 };
219
215
<a name="l00244"></a>00244
220
<a name="l00246"></a>00246 <span class="keyword">inline</span> <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a> <a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">begin</a>() <span class="keyword">const</span>;
221
<a name="l00248"></a>00248 <span class="keyword">inline</span> <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a> <a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">end</a>() <span class="keyword">const</span>;
222
<a name="l00250"></a>00250 <a class="code" href="classtree_1_1post__order__iterator.html">post_order_iterator</a> <a class="code" href="classtree.html#6c02eb9372a46a6f75f5306501a2d328">begin_post</a>() <span class="keyword">const</span>;
223
<a name="l00252"></a>00252 <a class="code" href="classtree_1_1post__order__iterator.html">post_order_iterator</a> <a class="code" href="classtree.html#230eeb27fe063d07a18ee4020896c1cb">end_post</a>() <span class="keyword">const</span>;
224
<a name="l00254"></a>00254 <a class="code" href="classtree_1_1fixed__depth__iterator.html">fixed_depth_iterator</a> <a class="code" href="classtree.html#4e811cfdd89077e8a2d6a0e54ded5156">begin_fixed</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>) <span class="keyword">const</span>;
225
<a name="l00256"></a>00256 <a class="code" href="classtree_1_1fixed__depth__iterator.html">fixed_depth_iterator</a> <a class="code" href="classtree.html#2fbf1396c3067d11f47950fb879edbb9">end_fixed</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>) <span class="keyword">const</span>;
226
<a name="l00258"></a>00258 <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> <a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">begin</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&) <span class="keyword">const</span>;
227
<a name="l00260"></a>00260 <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> <a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">end</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&) <span class="keyword">const</span>;
216
<a name="l00246"></a>00246 <span class="keyword">inline</span> <a class="code" href="classtree_1_1pre__order__iterator.html" title="Depth-first iterator, first accessing the node, then its children.">pre_order_iterator</a> <a class="code" href="classtree_1_1iterator__base.html#7fad2f6cc1a6a667b5c71bb16c9b84e5">begin</a>() <span class="keyword">const</span>;
217
<a name="l00248"></a>00248 <span class="keyword">inline</span> <a class="code" href="classtree_1_1pre__order__iterator.html" title="Depth-first iterator, first accessing the node, then its children.">pre_order_iterator</a> <a class="code" href="classtree_1_1iterator__base.html#399dabd62f0659c02bfda59b26bdeefe">end</a>() <span class="keyword">const</span>;
218
<a name="l00250"></a>00250 <a class="code" href="classtree_1_1post__order__iterator.html" title="Depth-first iterator, first accessing the children, then the node itself.">post_order_iterator</a> <a class="code" href="classtree.html#73c673d39fe46db7ca4e1533841cdbc0" title="Return post-order iterator to the beginning of the tree.">begin_post</a>() <span class="keyword">const</span>;
219
<a name="l00252"></a>00252 <a class="code" href="classtree_1_1post__order__iterator.html" title="Depth-first iterator, first accessing the children, then the node itself.">post_order_iterator</a> <a class="code" href="classtree.html#d339ab550fc2718e84506e91960a177f" title="Return post-order iterator to the end of the tree.">end_post</a>() <span class="keyword">const</span>;
220
<a name="l00254"></a>00254 <a class="code" href="classtree_1_1fixed__depth__iterator.html" title="Iterator which traverses only the nodes at a given depth from the root.">fixed_depth_iterator</a> <a class="code" href="classtree.html#3e7ee34b9582cb6f0bd5b25f501a1057" title="Return fixed-depth iterator to the first node at a given depth.">begin_fixed</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>&, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>) <span class="keyword">const</span>;
221
<a name="l00256"></a>00256 <a class="code" href="classtree_1_1fixed__depth__iterator.html" title="Iterator which traverses only the nodes at a given depth from the root.">fixed_depth_iterator</a> <a class="code" href="classtree.html#bab26c0edd25cc836ed768e32c034165" title="Return fixed-depth iterator to end of the nodes at given depth.">end_fixed</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>&, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>) <span class="keyword">const</span>;
222
<a name="l00258"></a>00258 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> <a class="code" href="classtree_1_1iterator__base.html#7fad2f6cc1a6a667b5c71bb16c9b84e5">begin</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>&) <span class="keyword">const</span>;
223
<a name="l00260"></a>00260 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> <a class="code" href="classtree_1_1iterator__base.html#399dabd62f0659c02bfda59b26bdeefe">end</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>&) <span class="keyword">const</span>;
228
224
<a name="l00261"></a>00261
229
<a name="l00263"></a>00263 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#a00c1035eb3750d402f0830196264e7f">parent</a>(iter) <span class="keyword">const</span>;
230
<a name="l00265"></a>00265 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#2521b543afdcb57b969e77c910141e12">previous_sibling</a>(iter) <span class="keyword">const</span>;
231
<a name="l00267"></a>00267 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#0d28ed2bd76b14ee168f5497159e685f">next_sibling</a>(iter) <span class="keyword">const</span>;
232
<a name="l00269"></a>00269 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#a6d518c3d4ab2359cce1e5bf50a675c0">next_at_same_depth</a>(iter) <span class="keyword">const</span>;
225
<a name="l00263"></a>00263 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#aaaa1622d2d58ecda846640bd8f8bd28" title="Return iterator to the parent of a node.">parent</a>(iter) <span class="keyword">const</span>;
226
<a name="l00265"></a>00265 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#6d38ef0b2b73266cbc39ab021482bb50" title="Return iterator to the previous sibling of a node.">previous_sibling</a>(iter) <span class="keyword">const</span>;
227
<a name="l00267"></a>00267 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#4e3ea50e0949bd05e27ecb9c6b7162ff" title="Return iterator to the next sibling of a node.">next_sibling</a>(iter) <span class="keyword">const</span>;
228
<a name="l00269"></a>00269 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#ce3b299e157ec177230a0144771b2a7e" title="Return iterator to the next node at a given depth.">next_at_same_depth</a>(iter) <span class="keyword">const</span>;
233
229
<a name="l00270"></a>00270
234
<a name="l00272"></a>00272 <span class="keywordtype">void</span> <a class="code" href="classtree.html#e7dc77e5686e51be152d43ad01fed48d">clear</a>();
235
<a name="l00274"></a>00274 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#fb19caa16588297c9674abb18c40a32a">erase</a>(iter);
236
<a name="l00276"></a>00276 <span class="keywordtype">void</span> <a class="code" href="classtree.html#0a3ebbed379f55e5550a7d213d0513d2">erase_children</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&);
230
<a name="l00272"></a>00272 <span class="keywordtype">void</span> <a class="code" href="classtree.html#a8cf6dfe17504abfc0ffabb5a4ba9d0a" title="Erase all nodes of the tree.">clear</a>();
231
<a name="l00274"></a>00274 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#3eb424c89446ae17a747d2aca2cdda4b" title="Erase element at position pointed to by iterator, return incremented iterator.">erase</a>(iter);
232
<a name="l00276"></a>00276 <span class="keywordtype">void</span> <a class="code" href="classtree.html#05d5fd71c206efc8ac30df5cd46176bc" title="Erase all children of the node pointed to by iterator.">erase_children</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>&);
237
233
<a name="l00277"></a>00277
238
<a name="l00279"></a>00279 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#61f096e7fbd483ff1fc1b56fe25ffcf3">append_child</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>);
239
<a name="l00281"></a>00281 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#61f096e7fbd483ff1fc1b56fe25ffcf3">append_child</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, <span class="keyword">const</span> T& x);
240
<a name="l00283"></a>00283 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#61f096e7fbd483ff1fc1b56fe25ffcf3">append_child</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, iter other_position);
241
<a name="l00285"></a>00285 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#b73148412a532d3216fb9741bc8c4e67">append_children</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> from, <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> to);
234
<a name="l00279"></a>00279 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#8d68e95f5088d48cb54fd6ae381729f0" title="Insert empty node as last child of node pointed to by position.">append_child</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>);
235
<a name="l00281"></a>00281 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#8d68e95f5088d48cb54fd6ae381729f0" title="Insert empty node as last child of node pointed to by position.">append_child</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <span class="keyword">const</span> T& x);
236
<a name="l00283"></a>00283 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#8d68e95f5088d48cb54fd6ae381729f0" title="Insert empty node as last child of node pointed to by position.">append_child</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, iter other_position);
237
<a name="l00285"></a>00285 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#92ab22e0a98d8899c0d1b6c9d0a85465" title="Append the nodes in the from-to range (plus their children) as children of position...">append_children</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> from, <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> to);
242
238
<a name="l00286"></a>00286
243
<a name="l00288"></a>00288 <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a> <a class="code" href="classtree.html#e6749fed3d80f2b74bb6319c4eb2af73">set_head</a>(<span class="keyword">const</span> T& x);
244
<a name="l00290"></a>00290 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#fb3e3d6dd64410aa9af067e315c87360">insert</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, <span class="keyword">const</span> T& x);
245
<a name="l00292"></a>00292 <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> <a class="code" href="classtree.html#fb3e3d6dd64410aa9af067e315c87360">insert</a>(<a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, <span class="keyword">const</span> T& x);
246
<a name="l00294"></a>00294 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#6c41a7abd2827c9193f03ea0a51e8e30">insert_subtree</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, <span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>& <a class="code" href="classtree.html#e0c63efd151b313a372d01f2dae19c0d">subtree</a>);
247
<a name="l00296"></a>00296 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#9be9c658ab428eb962c55bef3f872b47">insert_after</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, <span class="keyword">const</span> T& x);
239
<a name="l00288"></a>00288 <a class="code" href="classtree_1_1pre__order__iterator.html" title="Depth-first iterator, first accessing the node, then its children.">pre_order_iterator</a> <a class="code" href="classtree.html#f11d736ea971ab93651350161f5a7535" title="Short-hand to insert topmost node in otherwise empty tree.">set_head</a>(<span class="keyword">const</span> T& x);
240
<a name="l00290"></a>00290 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#c3d19d3a42f91618267674f2c236aad9" title="Insert node as previous sibling of node pointed to by position.">insert</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <span class="keyword">const</span> T& x);
241
<a name="l00292"></a>00292 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> <a class="code" href="classtree.html#c3d19d3a42f91618267674f2c236aad9" title="Insert node as previous sibling of node pointed to by position.">insert</a>(<a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <span class="keyword">const</span> T& x);
242
<a name="l00294"></a>00294 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#d66d55d58b48ce0a8d7a5b41abe923d5" title="Insert node (with children) pointed to by subtree as previous sibling of node pointed...">insert_subtree</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>& <a class="code" href="classtree.html#db61bebed6c56eb5641b0b7fab7fe625" title="Extract a new tree formed by the range of siblings plus all their children.">subtree</a>);
243
<a name="l00296"></a>00296 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#215ab56bd13f59c661eb2298e373ff3e" title="Insert node as next sibling of node pointed to by position.">insert_after</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <span class="keyword">const</span> T& x);
248
244
<a name="l00297"></a>00297
249
<a name="l00299"></a>00299 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#3839ca59210cc5171bc768552cc82dbe">replace</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, <span class="keyword">const</span> T& x);
250
<a name="l00301"></a>00301 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#3839ca59210cc5171bc768552cc82dbe">replace</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, <span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>& from);
251
<a name="l00303"></a>00303 <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> <a class="code" href="classtree.html#3839ca59210cc5171bc768552cc82dbe">replace</a>(<a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> orig_begin, <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> orig_end,
252
<a name="l00304"></a>00304 <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> new_begin, <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> new_end);
245
<a name="l00299"></a>00299 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#4885e968c82655ebebea5d0927b7e9f4" title="Replace node at &#39;position&#39; with other node (keeping same children); &#39;position&#39;...">replace</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <span class="keyword">const</span> T& x);
246
<a name="l00301"></a>00301 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#4885e968c82655ebebea5d0927b7e9f4" title="Replace node at &#39;position&#39; with other node (keeping same children); &#39;position&#39;...">replace</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>& from);
247
<a name="l00303"></a>00303 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> <a class="code" href="classtree.html#4885e968c82655ebebea5d0927b7e9f4" title="Replace node at &#39;position&#39; with other node (keeping same children); &#39;position&#39;...">replace</a>(<a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> orig_begin, <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> orig_end,
248
<a name="l00304"></a>00304 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> new_begin, <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> new_end);
253
249
<a name="l00305"></a>00305
254
<a name="l00307"></a>00307 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#aa9c55593a7d52cde352a3dde80fbaf9">flatten</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>);
255
<a name="l00309"></a>00309 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#8b127e71944f9bd724c8398f948e9192">reparent</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> <a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">begin</a>, <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> <a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">end</a>);
256
<a name="l00311"></a>00311 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#8b127e71944f9bd724c8398f948e9192">reparent</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, iter from);
250
<a name="l00307"></a>00307 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#479c8e3f748608a9b9fb91e58e18998c" title="Move all children of node at &#39;position&#39; to be siblings, returns position...">flatten</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>);
251
<a name="l00309"></a>00309 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#32b88523e2d5b6c78381b7da9455be5e" title="Move nodes in range to be children of &#39;position&#39;.">reparent</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> <a class="code" href="classtree_1_1iterator__base.html#7fad2f6cc1a6a667b5c71bb16c9b84e5">begin</a>, <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> <a class="code" href="classtree_1_1iterator__base.html#399dabd62f0659c02bfda59b26bdeefe">end</a>);
252
<a name="l00311"></a>00311 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#32b88523e2d5b6c78381b7da9455be5e" title="Move nodes in range to be children of &#39;position&#39;.">reparent</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, iter from);
257
253
<a name="l00312"></a>00312
258
<a name="l00314"></a>00314 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#f4f74176002736b5ad91d07e37954e18">move_after</a>(iter target, iter source);
259
<a name="l00316"></a>00316 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#0298006c1f5106ec81657fc1fc9d1cc3">move_before</a>(iter target, iter source);
260
<a name="l00318"></a>00318 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#8c1f99b308550e6eaa1e3ff7932dd7c3">move_ontop</a>(iter target, iter source);
254
<a name="l00314"></a>00314 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#e7f72ba46cd061f71720c731b4a9bf63" title="Move &#39;source&#39; node (plus its children) to become the next sibling of &#39;target&#39;...">move_after</a>(iter target, iter source);
255
<a name="l00316"></a>00316 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#b45aa15042445a81b13873d3ef4a2e86" title="Move &#39;source&#39; node (plus its children) to become the previous sibling of...">move_before</a>(iter target, iter source);
256
<a name="l00318"></a>00318 <span class="keyword">template</span><<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#a4f8b906b2758eec530e28387b819284" title="Move &#39;source&#39; node (plus its children) to become the node at &#39;target&#39;...">move_ontop</a>(iter target, iter source);
261
257
<a name="l00319"></a>00319
262
<a name="l00321"></a>00321 <span class="keywordtype">void</span> <a class="code" href="classtree.html#66539d831037c85092fe6e3c309c6222">merge</a>(<a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a>, <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a>, <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a>, <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a>,
258
<a name="l00321"></a>00321 <span class="keywordtype">void</span> <a class="code" href="classtree.html#1e3cd901f8f8d8a3da0e1d32e9282db1" title="Merge with other tree, creating new branches and leaves only if they are not already...">merge</a>(<a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a>, <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a>, <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a>, <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a>,
263
259
<a name="l00322"></a>00322 <span class="keywordtype">bool</span> duplicate_leaves=<span class="keyword">false</span>);
264
<a name="l00324"></a>00324 <span class="keywordtype">void</span> <a class="code" href="classtree.html#d2a8822b04bc1b48da62adf35f1f2b7e">sort</a>(<a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> from, <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> to, <span class="keywordtype">bool</span> deep=<span class="keyword">false</span>);
260
<a name="l00324"></a>00324 <span class="keywordtype">void</span> <a class="code" href="classtree.html#498ec42a5eb44cba8bf9ef6e7fd5db9e" title="Sort (std::sort only moves values of nodes, this one moves children as well).">sort</a>(<a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> from, <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> to, <span class="keywordtype">bool</span> deep=<span class="keyword">false</span>);
265
261
<a name="l00325"></a>00325 <span class="keyword">template</span><<span class="keyword">class</span> StrictWeakOrdering>
266
<a name="l00326"></a>00326 <span class="keywordtype">void</span> <a class="code" href="classtree.html#d2a8822b04bc1b48da62adf35f1f2b7e">sort</a>(<a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> from, <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> to, StrictWeakOrdering comp, <span class="keywordtype">bool</span> deep=<span class="keyword">false</span>);
262
<a name="l00326"></a>00326 <span class="keywordtype">void</span> <a class="code" href="classtree.html#498ec42a5eb44cba8bf9ef6e7fd5db9e" title="Sort (std::sort only moves values of nodes, this one moves children as well).">sort</a>(<a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> from, <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> to, StrictWeakOrdering comp, <span class="keywordtype">bool</span> deep=<span class="keyword">false</span>);
267
263
<a name="l00328"></a>00328 <span class="keyword">template</span><<span class="keyword">typename</span> iter>
268
<a name="l00329"></a>00329 <span class="keywordtype">bool</span> <a class="code" href="classtree.html#4fee29597a52bb5d7c80d1d38abe7952">equal</a>(<span class="keyword">const</span> iter& one, <span class="keyword">const</span> iter& two, <span class="keyword">const</span> iter& three) <span class="keyword">const</span>;
264
<a name="l00329"></a>00329 <span class="keywordtype">bool</span> <a class="code" href="classtree.html#59488f63fc6ad997809d971c48ecfc04" title="Compare two ranges of nodes (compares nodes as well as tree structure).">equal</a>(<span class="keyword">const</span> iter& one, <span class="keyword">const</span> iter& two, <span class="keyword">const</span> iter& three) <span class="keyword">const</span>;
269
265
<a name="l00330"></a>00330 <span class="keyword">template</span><<span class="keyword">typename</span> iter, <span class="keyword">class</span> BinaryPredicate>
270
<a name="l00331"></a>00331 <span class="keywordtype">bool</span> <a class="code" href="classtree.html#4fee29597a52bb5d7c80d1d38abe7952">equal</a>(<span class="keyword">const</span> iter& one, <span class="keyword">const</span> iter& two, <span class="keyword">const</span> iter& three, BinaryPredicate) <span class="keyword">const</span>;
266
<a name="l00331"></a>00331 <span class="keywordtype">bool</span> <a class="code" href="classtree.html#59488f63fc6ad997809d971c48ecfc04" title="Compare two ranges of nodes (compares nodes as well as tree structure).">equal</a>(<span class="keyword">const</span> iter& one, <span class="keyword">const</span> iter& two, <span class="keyword">const</span> iter& three, BinaryPredicate) <span class="keyword">const</span>;
271
267
<a name="l00332"></a>00332 <span class="keyword">template</span><<span class="keyword">typename</span> iter>
272
<a name="l00333"></a>00333 <span class="keywordtype">bool</span> <a class="code" href="classtree.html#c8ed9b1eda534a67881553c59cc8cc9d">equal_subtree</a>(<span class="keyword">const</span> iter& one, <span class="keyword">const</span> iter& two) <span class="keyword">const</span>;
268
<a name="l00333"></a>00333 <span class="keywordtype">bool</span> <a class="code" href="classtree.html#6e2e76dfa6f0f51ca6f573d73b0c1b28">equal_subtree</a>(<span class="keyword">const</span> iter& one, <span class="keyword">const</span> iter& two) <span class="keyword">const</span>;
273
269
<a name="l00334"></a>00334 <span class="keyword">template</span><<span class="keyword">typename</span> iter, <span class="keyword">class</span> BinaryPredicate>
274
<a name="l00335"></a>00335 <span class="keywordtype">bool</span> <a class="code" href="classtree.html#c8ed9b1eda534a67881553c59cc8cc9d">equal_subtree</a>(<span class="keyword">const</span> iter& one, <span class="keyword">const</span> iter& two, BinaryPredicate) <span class="keyword">const</span>;
275
<a name="l00337"></a>00337 <a class="code" href="classtree.html">tree</a> <a class="code" href="classtree.html#e0c63efd151b313a372d01f2dae19c0d">subtree</a>(<a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> from, <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> to) <span class="keyword">const</span>;
276
<a name="l00338"></a>00338 <span class="keywordtype">void</span> <a class="code" href="classtree.html#e0c63efd151b313a372d01f2dae19c0d">subtree</a>(<a class="code" href="classtree.html">tree</a>&, <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> from, <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> to) <span class="keyword">const</span>;
277
<a name="l00340"></a>00340 <span class="keywordtype">void</span> <a class="code" href="classtree.html#36b40bbffa2392b7a765cc74364b35d5">swap</a>(<a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> it);
270
<a name="l00335"></a>00335 <span class="keywordtype">bool</span> <a class="code" href="classtree.html#6e2e76dfa6f0f51ca6f573d73b0c1b28">equal_subtree</a>(<span class="keyword">const</span> iter& one, <span class="keyword">const</span> iter& two, BinaryPredicate) <span class="keyword">const</span>;
271
<a name="l00337"></a>00337 <a class="code" href="classtree.html">tree</a> <a class="code" href="classtree.html#db61bebed6c56eb5641b0b7fab7fe625" title="Extract a new tree formed by the range of siblings plus all their children.">subtree</a>(<a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> from, <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> to) <span class="keyword">const</span>;
272
<a name="l00338"></a>00338 <span class="keywordtype">void</span> <a class="code" href="classtree.html#db61bebed6c56eb5641b0b7fab7fe625" title="Extract a new tree formed by the range of siblings plus all their children.">subtree</a>(<a class="code" href="classtree.html">tree</a>&, <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> from, <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> to) <span class="keyword">const</span>;
273
<a name="l00340"></a>00340 <span class="keywordtype">void</span> <a class="code" href="classtree.html#e842f9b70235bc2412b3c43bca759448" title="Exchange the node (plus subtree) with its sibling node (do nothing if no sibling...">swap</a>(<a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> it);
278
274
<a name="l00341"></a>00341
279
<a name="l00343"></a>00343 <span class="keywordtype">int</span> <a class="code" href="classtree.html#153ad4a2483c86e5f3647f131629400b">size</a>() <span class="keyword">const</span>;
280
<a name="l00345"></a>00345 <span class="keywordtype">bool</span> <a class="code" href="classtree.html#04cf6fc4add8819a389dcf7e107ad2bf">empty</a>() <span class="keyword">const</span>;
281
<a name="l00347"></a>00347 <span class="keywordtype">int</span> <a class="code" href="classtree.html#464267273fcfac957e31e28937cf996b">depth</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&) <span class="keyword">const</span>;
282
<a name="l00349"></a>00349 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classtree.html#9e33e1e03c74f7fd67d0c8ab1b014f70">number_of_children</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&) <span class="keyword">const</span>;
283
<a name="l00351"></a>00351 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classtree.html#752796c631b632e0e3c3cecf348ff24e">number_of_siblings</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&) <span class="keyword">const</span>;
284
<a name="l00353"></a>00353 <span class="keywordtype">bool</span> <a class="code" href="classtree.html#b983b7823bc78d7a5efaf994938188a2">is_in_subtree</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>& <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, <span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>& <a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">begin</a>,
285
<a name="l00354"></a>00354 <span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>& <a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">end</a>) <span class="keyword">const</span>;
286
<a name="l00356"></a>00356 <span class="keywordtype">bool</span> <a class="code" href="classtree.html#701009e4869f78144556ebc4ce33750f">is_valid</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&) <span class="keyword">const</span>;
275
<a name="l00343"></a>00343 <span class="keywordtype">int</span> <a class="code" href="classtree.html#219ff1bfc99f78fd9a2db71f41891523" title="Count the total number of nodes.">size</a>() <span class="keyword">const</span>;
276
<a name="l00345"></a>00345 <span class="keywordtype">bool</span> <a class="code" href="classtree.html#e9f7fd30c51443d46ca8941d5bc06da2" title="Check if tree is empty.">empty</a>() <span class="keyword">const</span>;
277
<a name="l00347"></a>00347 <span class="keywordtype">int</span> <a class="code" href="classtree.html#16c66be75ca89c999a9c4a68497b05a1" title="Compute the depth to the root.">depth</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>&) <span class="keyword">const</span>;
278
<a name="l00349"></a>00349 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classtree_1_1iterator__base.html#435004214270928d106dd4c8f6a36f17" title="Number of children of the node pointed to by the iterator.">number_of_children</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>&) <span class="keyword">const</span>;
279
<a name="l00351"></a>00351 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classtree.html#3cddce970c4d44af57cf9ec0d7c3d009" title="Count the number of &#39;next&#39; siblings of node at iterator.">number_of_siblings</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>&) <span class="keyword">const</span>;
280
<a name="l00353"></a>00353 <span class="keywordtype">bool</span> <a class="code" href="classtree.html#825e2106781e846bdd8732c117dc21db" title="Determine whether node at position is in the subtrees with root in the range.">is_in_subtree</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>& <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>& <a class="code" href="classtree_1_1iterator__base.html#7fad2f6cc1a6a667b5c71bb16c9b84e5">begin</a>,
281
<a name="l00354"></a>00354 <span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>& <a class="code" href="classtree_1_1iterator__base.html#399dabd62f0659c02bfda59b26bdeefe">end</a>) <span class="keyword">const</span>;
282
<a name="l00356"></a>00356 <span class="keywordtype">bool</span> <a class="code" href="classtree.html#9605b028195248894dc8cf506cd256e3" title="Determine whether the iterator is an &#39;end&#39; iterator and thus not actually...">is_valid</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>&) <span class="keyword">const</span>;
287
283
<a name="l00357"></a>00357
288
<a name="l00359"></a>00359 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classtree.html#e470529bbd14990a0272a82724b93217">index</a>(<a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> it) <span class="keyword">const</span>;
289
<a name="l00361"></a>00361 <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> <a class="code" href="classtree.html#853359c74d04faf26a086dca7c2c5dc1">child</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>& <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>) <span class="keyword">const</span>;
284
<a name="l00359"></a>00359 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classtree.html#de5ec1ba55f94165062e50d01ec35d86" title="Determine the index of a node in the range of siblings to which it belongs.">index</a>(<a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> it) <span class="keyword">const</span>;
285
<a name="l00361"></a>00361 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> <a class="code" href="classtree.html#446c722c82607f8b3243a9153b665d19" title="Inverse of &#39;index&#39;: return the n-th child of the node at position.">child</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>& <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>) <span class="keyword">const</span>;
290
286
<a name="l00362"></a>00362
291
<a name="l00364"></a><a class="code" href="classtree_1_1iterator__base__less.html">00364</a> <span class="keyword">class </span><a class="code" href="classtree_1_1iterator__base__less.html">iterator_base_less</a> {
287
<a name="l00364"></a><a class="code" href="classtree_1_1iterator__base__less.html">00364</a> <span class="keyword">class </span><a class="code" href="classtree_1_1iterator__base__less.html" title="Comparator class for iterators (compares the actual node content, not pointer values)...">iterator_base_less</a> {
292
288
<a name="l00365"></a>00365 <span class="keyword">public</span>:
293
<a name="l00366"></a><a class="code" href="classtree_1_1iterator__base__less.html#bd569dd543c428fea5acec7e7d0b02ea">00366</a> <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::iterator_base</a>& one,
289
<a name="l00366"></a><a class="code" href="classtree_1_1iterator__base__less.html#3dc4cb0c8b9a2e3ad5ed7852dd9b6a3b">00366</a> <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::iterator_base</a>& one,
294
290
<a name="l00367"></a>00367 <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::iterator_base</a>& two)<span class="keyword"> const</span>
295
291
<a name="l00368"></a>00368 <span class="keyword"> </span>{
296
292
<a name="l00369"></a>00369 <span class="keywordflow">return</span> one.node < two.node;
297
293
<a name="l00370"></a>00370 }
298
294
<a name="l00371"></a>00371 };
299
<a name="l00372"></a><a class="code" href="classtree.html#fbb20670ecc61fe9ad3e7bd502227397">00372</a> <a class="code" href="classtree__node__.html">tree_node</a> *<a class="code" href="classtree.html#fbb20670ecc61fe9ad3e7bd502227397">head</a>, *<a class="code" href="classtree.html#e45df182e3702084c6bd147d6479cc08">feet</a>; <span class="comment">// head/feet are always dummy; if an iterator points to them it is invalid</span>
295
<a name="l00372"></a><a class="code" href="classtree.html#10991cbf1497e125c0ef04d6e292e32b">00372</a> <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *<a class="code" href="classtree.html#10991cbf1497e125c0ef04d6e292e32b">head</a>, *<a class="code" href="classtree.html#e1dbb80115ba483e37d081a2256c239b">feet</a>; <span class="comment">// head/feet are always dummy; if an iterator points to them it is invalid</span>
300
296
<a name="l00373"></a>00373 <span class="keyword">private</span>:
301
297
<a name="l00374"></a>00374 tree_node_allocator alloc_;
302
298
<a name="l00375"></a>00375 <span class="keywordtype">void</span> head_initialise_();
458
454
<a name="l00532"></a>00532
459
455
<a name="l00533"></a>00533 <span class="keyword">template</span><<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
460
456
<a name="l00534"></a>00534 <span class="keyword">template</span><<span class="keyword">class</span> iter>
461
<a name="l00535"></a><a class="code" href="classtree.html#fb19caa16588297c9674abb18c40a32a">00535</a> iter <a class="code" href="classtree.html#fb19caa16588297c9674abb18c40a32a">tree<T, tree_node_allocator>::erase</a>(iter it)
457
<a name="l00535"></a><a class="code" href="classtree.html#3eb424c89446ae17a747d2aca2cdda4b">00535</a> iter <a class="code" href="classtree.html#3eb424c89446ae17a747d2aca2cdda4b" title="Erase element at position pointed to by iterator, return incremented iterator.">tree<T, tree_node_allocator>::erase</a>(iter it)
462
458
<a name="l00536"></a>00536 {
463
<a name="l00537"></a>00537 <a class="code" href="classtree__node__.html">tree_node</a> *cur=it.node;
464
<a name="l00538"></a>00538 assert(cur!=<a class="code" href="classtree.html#fbb20670ecc61fe9ad3e7bd502227397">head</a>);
459
<a name="l00537"></a>00537 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *cur=it.node;
460
<a name="l00538"></a>00538 assert(cur!=<a class="code" href="classtree.html#10991cbf1497e125c0ef04d6e292e32b">head</a>);
465
461
<a name="l00539"></a>00539 iter ret=it;
466
462
<a name="l00540"></a>00540 ret.skip_children();
467
463
<a name="l00541"></a>00541 ++ret;
468
<a name="l00542"></a>00542 <a class="code" href="classtree.html#0a3ebbed379f55e5550a7d213d0513d2">erase_children</a>(it);
469
<a name="l00543"></a>00543 <span class="keywordflow">if</span>(cur-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>==0) {
470
<a name="l00544"></a>00544 cur-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>->first_child=cur-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
464
<a name="l00542"></a>00542 <a class="code" href="classtree.html#05d5fd71c206efc8ac30df5cd46176bc" title="Erase all children of the node pointed to by iterator.">erase_children</a>(it);
465
<a name="l00543"></a>00543 <span class="keywordflow">if</span>(cur-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>==0) {
466
<a name="l00544"></a>00544 cur-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>->first_child=cur-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
471
467
<a name="l00545"></a>00545 }
472
468
<a name="l00546"></a>00546 <span class="keywordflow">else</span> {
473
<a name="l00547"></a>00547 cur-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>->next_sibling=cur-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
469
<a name="l00547"></a>00547 cur-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>->next_sibling=cur-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
474
470
<a name="l00548"></a>00548 }
475
<a name="l00549"></a>00549 <span class="keywordflow">if</span>(cur-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>==0) {
476
<a name="l00550"></a>00550 cur-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>->last_child=cur-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
471
<a name="l00549"></a>00549 <span class="keywordflow">if</span>(cur-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>==0) {
472
<a name="l00550"></a>00550 cur-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>->last_child=cur-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
477
473
<a name="l00551"></a>00551 }
478
474
<a name="l00552"></a>00552 <span class="keywordflow">else</span> {
479
<a name="l00553"></a>00553 cur-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>->prev_sibling=cur-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
475
<a name="l00553"></a>00553 cur-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>->prev_sibling=cur-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
480
476
<a name="l00554"></a>00554 }
481
477
<a name="l00555"></a>00555
482
<a name="l00556"></a>00556 <a class="code" href="namespacekp.html#734effe09627ef03b0d12f076775c783">kp::destructor</a>(&cur-><a class="code" href="classtree__node__.html#ec3d00d908b82e0d429a431e566fed95">data</a>);
478
<a name="l00556"></a>00556 <a class="code" href="namespacekp.html#a6813c11eeb1c091cdd1eff62de70914">kp::destructor</a>(&cur-><a class="code" href="classtree__node__.html#4c15077a3ad0552413d1268ee4be1bef">data</a>);
483
479
<a name="l00557"></a>00557 alloc_.deallocate(cur,1);
484
480
<a name="l00558"></a>00558 <span class="keywordflow">return</span> ret;
485
481
<a name="l00559"></a>00559 }
486
482
<a name="l00560"></a>00560
487
483
<a name="l00561"></a>00561 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
488
<a name="l00562"></a><a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">00562</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::pre_order_iterator</a> <a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">tree<T, tree_node_allocator>::begin</a>()<span class="keyword"> const</span>
484
<a name="l00562"></a><a class="code" href="classtree.html#76b3a629c0208d5ae5b4ffcd4492e05e">00562</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::pre_order_iterator</a> <a class="code" href="classtree.html#76b3a629c0208d5ae5b4ffcd4492e05e" title="Return iterator to the beginning of the tree.">tree<T, tree_node_allocator>::begin</a>()<span class="keyword"> const</span>
489
485
<a name="l00563"></a>00563 <span class="keyword"> </span>{
490
<a name="l00564"></a>00564 <span class="keywordflow">return</span> <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a>(<a class="code" href="classtree.html#fbb20670ecc61fe9ad3e7bd502227397">head</a>-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>);
486
<a name="l00564"></a>00564 <span class="keywordflow">return</span> <a class="code" href="classtree_1_1pre__order__iterator.html" title="Depth-first iterator, first accessing the node, then its children.">pre_order_iterator</a>(<a class="code" href="classtree.html#10991cbf1497e125c0ef04d6e292e32b">head</a>-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>);
491
487
<a name="l00565"></a>00565 }
492
488
<a name="l00566"></a>00566
493
489
<a name="l00567"></a>00567 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
494
<a name="l00568"></a><a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">00568</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::pre_order_iterator</a> <a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">tree<T, tree_node_allocator>::end</a>()<span class="keyword"> const</span>
490
<a name="l00568"></a><a class="code" href="classtree.html#0d09fe9fd34fbfc9c9e4e28cb694448e">00568</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::pre_order_iterator</a> <a class="code" href="classtree.html#0d09fe9fd34fbfc9c9e4e28cb694448e" title="Return iterator to the end of the tree.">tree<T, tree_node_allocator>::end</a>()<span class="keyword"> const</span>
495
491
<a name="l00569"></a>00569 <span class="keyword"> </span>{
496
<a name="l00570"></a>00570 <span class="keywordflow">return</span> <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a>(<a class="code" href="classtree.html#e45df182e3702084c6bd147d6479cc08">feet</a>);
492
<a name="l00570"></a>00570 <span class="keywordflow">return</span> <a class="code" href="classtree_1_1pre__order__iterator.html" title="Depth-first iterator, first accessing the node, then its children.">pre_order_iterator</a>(<a class="code" href="classtree.html#e1dbb80115ba483e37d081a2256c239b">feet</a>);
497
493
<a name="l00571"></a>00571 }
498
494
<a name="l00572"></a>00572
499
495
<a name="l00573"></a>00573 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
500
<a name="l00574"></a><a class="code" href="classtree.html#6c02eb9372a46a6f75f5306501a2d328">00574</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator</a> <a class="code" href="classtree.html#6c02eb9372a46a6f75f5306501a2d328">tree<T, tree_node_allocator>::begin_post</a>()<span class="keyword"> const</span>
496
<a name="l00574"></a><a class="code" href="classtree.html#73c673d39fe46db7ca4e1533841cdbc0">00574</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator</a> <a class="code" href="classtree.html#73c673d39fe46db7ca4e1533841cdbc0" title="Return post-order iterator to the beginning of the tree.">tree<T, tree_node_allocator>::begin_post</a>()<span class="keyword"> const</span>
501
497
<a name="l00575"></a>00575 <span class="keyword"> </span>{
502
<a name="l00576"></a>00576 <a class="code" href="classtree__node__.html">tree_node</a> *tmp=<a class="code" href="classtree.html#fbb20670ecc61fe9ad3e7bd502227397">head</a>-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
503
<a name="l00577"></a>00577 <span class="keywordflow">if</span>(tmp!=<a class="code" href="classtree.html#e45df182e3702084c6bd147d6479cc08">feet</a>) {
504
<a name="l00578"></a>00578 <span class="keywordflow">while</span>(tmp-><a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>)
505
<a name="l00579"></a>00579 tmp=tmp-><a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>;
498
<a name="l00576"></a>00576 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *tmp=<a class="code" href="classtree.html#10991cbf1497e125c0ef04d6e292e32b">head</a>-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
499
<a name="l00577"></a>00577 <span class="keywordflow">if</span>(tmp!=<a class="code" href="classtree.html#e1dbb80115ba483e37d081a2256c239b">feet</a>) {
500
<a name="l00578"></a>00578 <span class="keywordflow">while</span>(tmp-><a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>)
501
<a name="l00579"></a>00579 tmp=tmp-><a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>;
506
502
<a name="l00580"></a>00580 }
507
<a name="l00581"></a>00581 <span class="keywordflow">return</span> <a class="code" href="classtree_1_1post__order__iterator.html">post_order_iterator</a>(tmp);
503
<a name="l00581"></a>00581 <span class="keywordflow">return</span> <a class="code" href="classtree_1_1post__order__iterator.html" title="Depth-first iterator, first accessing the children, then the node itself.">post_order_iterator</a>(tmp);
508
504
<a name="l00582"></a>00582 }
509
505
<a name="l00583"></a>00583
510
506
<a name="l00584"></a>00584 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
511
<a name="l00585"></a><a class="code" href="classtree.html#230eeb27fe063d07a18ee4020896c1cb">00585</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator</a> <a class="code" href="classtree.html#230eeb27fe063d07a18ee4020896c1cb">tree<T, tree_node_allocator>::end_post</a>()<span class="keyword"> const</span>
507
<a name="l00585"></a><a class="code" href="classtree.html#d339ab550fc2718e84506e91960a177f">00585</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator</a> <a class="code" href="classtree.html#d339ab550fc2718e84506e91960a177f" title="Return post-order iterator to the end of the tree.">tree<T, tree_node_allocator>::end_post</a>()<span class="keyword"> const</span>
512
508
<a name="l00586"></a>00586 <span class="keyword"> </span>{
513
<a name="l00587"></a>00587 <span class="keywordflow">return</span> <a class="code" href="classtree_1_1post__order__iterator.html">post_order_iterator</a>(<a class="code" href="classtree.html#e45df182e3702084c6bd147d6479cc08">feet</a>);
509
<a name="l00587"></a>00587 <span class="keywordflow">return</span> <a class="code" href="classtree_1_1post__order__iterator.html" title="Depth-first iterator, first accessing the children, then the node itself.">post_order_iterator</a>(<a class="code" href="classtree.html#e1dbb80115ba483e37d081a2256c239b">feet</a>);
514
510
<a name="l00588"></a>00588 }
515
511
<a name="l00589"></a>00589
516
512
<a name="l00590"></a>00590 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
517
<a name="l00591"></a><a class="code" href="classtree.html#4e811cfdd89077e8a2d6a0e54ded5156">00591</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::fixed_depth_iterator</a> <a class="code" href="classtree.html#4e811cfdd89077e8a2d6a0e54ded5156">tree<T, tree_node_allocator>::begin_fixed</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>& pos, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dp)<span class="keyword"> const</span>
513
<a name="l00591"></a><a class="code" href="classtree.html#3e7ee34b9582cb6f0bd5b25f501a1057">00591</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::fixed_depth_iterator</a> <a class="code" href="classtree.html#3e7ee34b9582cb6f0bd5b25f501a1057" title="Return fixed-depth iterator to the first node at a given depth.">tree<T, tree_node_allocator>::begin_fixed</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>& pos, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dp)<span class="keyword"> const</span>
518
514
<a name="l00592"></a>00592 <span class="keyword"> </span>{
519
<a name="l00593"></a>00593 <a class="code" href="classtree__node__.html">tree_node</a> *tmp=pos.node;
515
<a name="l00593"></a>00593 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *tmp=pos.node;
520
516
<a name="l00594"></a>00594 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> curdepth=0;
521
517
<a name="l00595"></a>00595 <span class="keywordflow">while</span>(curdepth<dp) { <span class="comment">// go down one level</span>
522
<a name="l00596"></a>00596 <span class="keywordflow">while</span>(tmp-><a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>==0) {
523
<a name="l00597"></a>00597 tmp=tmp-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
518
<a name="l00596"></a>00596 <span class="keywordflow">while</span>(tmp-><a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>==0) {
519
<a name="l00597"></a>00597 tmp=tmp-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
524
520
<a name="l00598"></a>00598 <span class="keywordflow">if</span>(tmp==0)
525
521
<a name="l00599"></a>00599 <span class="keywordflow">throw</span> std::range_error(<span class="stringliteral">"tree: begin_fixed out of range"</span>);
526
522
<a name="l00600"></a>00600 }
527
<a name="l00601"></a>00601 tmp=tmp-><a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>;
523
<a name="l00601"></a>00601 tmp=tmp-><a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>;
528
524
<a name="l00602"></a>00602 ++curdepth;
529
525
<a name="l00603"></a>00603 }
530
526
<a name="l00604"></a>00604 <span class="keywordflow">return</span> tmp;
531
527
<a name="l00605"></a>00605 }
532
528
<a name="l00606"></a>00606
533
529
<a name="l00607"></a>00607 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
534
<a name="l00608"></a><a class="code" href="classtree.html#2fbf1396c3067d11f47950fb879edbb9">00608</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::fixed_depth_iterator</a> <a class="code" href="classtree.html#2fbf1396c3067d11f47950fb879edbb9">tree<T, tree_node_allocator>::end_fixed</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>& pos, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dp)<span class="keyword"> const</span>
530
<a name="l00608"></a><a class="code" href="classtree.html#bab26c0edd25cc836ed768e32c034165">00608</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::fixed_depth_iterator</a> <a class="code" href="classtree.html#bab26c0edd25cc836ed768e32c034165" title="Return fixed-depth iterator to end of the nodes at given depth.">tree<T, tree_node_allocator>::end_fixed</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>& pos, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dp)<span class="keyword"> const</span>
535
531
<a name="l00609"></a>00609 <span class="keyword"> </span>{
536
532
<a name="l00610"></a>00610 assert(1==0); <span class="comment">// FIXME: not correct yet</span>
537
<a name="l00611"></a>00611 <a class="code" href="classtree__node__.html">tree_node</a> *tmp=pos.node;
533
<a name="l00611"></a>00611 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *tmp=pos.node;
538
534
<a name="l00612"></a>00612 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> curdepth=1;
539
535
<a name="l00613"></a>00613 <span class="keywordflow">while</span>(curdepth<dp) { <span class="comment">// go down one level</span>
540
<a name="l00614"></a>00614 <span class="keywordflow">while</span>(tmp-><a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>==0) {
541
<a name="l00615"></a>00615 tmp=tmp-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
536
<a name="l00614"></a>00614 <span class="keywordflow">while</span>(tmp-><a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>==0) {
537
<a name="l00615"></a>00615 tmp=tmp-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
542
538
<a name="l00616"></a>00616 <span class="keywordflow">if</span>(tmp==0)
543
539
<a name="l00617"></a>00617 <span class="keywordflow">throw</span> std::range_error(<span class="stringliteral">"tree: end_fixed out of range"</span>);
544
540
<a name="l00618"></a>00618 }
545
<a name="l00619"></a>00619 tmp=tmp-><a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>;
541
<a name="l00619"></a>00619 tmp=tmp-><a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>;
546
542
<a name="l00620"></a>00620 ++curdepth;
547
543
<a name="l00621"></a>00621 }
548
544
<a name="l00622"></a>00622 <span class="keywordflow">return</span> tmp;
549
545
<a name="l00623"></a>00623 }
550
546
<a name="l00624"></a>00624
551
547
<a name="l00625"></a>00625 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
552
<a name="l00626"></a><a class="code" href="classtree.html#e0d9d063c13f84008a1026c74345f18f">00626</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator</a> <a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">tree<T, tree_node_allocator>::begin</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>& pos)<span class="keyword"> const</span>
548
<a name="l00626"></a><a class="code" href="classtree.html#a784ffa6dec85f52754dde8bd6a99aeb">00626</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator</a> <a class="code" href="classtree.html#76b3a629c0208d5ae5b4ffcd4492e05e" title="Return iterator to the beginning of the tree.">tree<T, tree_node_allocator>::begin</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>& pos)<span class="keyword"> const</span>
553
549
<a name="l00627"></a>00627 <span class="keyword"> </span>{
554
550
<a name="l00628"></a>00628 <span class="keywordflow">if</span>(pos.node->first_child==0) {
555
<a name="l00629"></a>00629 <span class="keywordflow">return</span> <a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">end</a>(pos);
551
<a name="l00629"></a>00629 <span class="keywordflow">return</span> <a class="code" href="classtree.html#0d09fe9fd34fbfc9c9e4e28cb694448e" title="Return iterator to the end of the tree.">end</a>(pos);
556
552
<a name="l00630"></a>00630 }
557
553
<a name="l00631"></a>00631 <span class="keywordflow">return</span> pos.node->first_child;
558
554
<a name="l00632"></a>00632 }
559
555
<a name="l00633"></a>00633
560
556
<a name="l00634"></a>00634 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
561
<a name="l00635"></a><a class="code" href="classtree.html#bfae09dea2fd743fd4a4fa0ae6eb68f9">00635</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator</a> <a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">tree<T, tree_node_allocator>::end</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>& pos)<span class="keyword"> const</span>
557
<a name="l00635"></a><a class="code" href="classtree.html#a6aa8b0c6af0f50bfc86592847759127">00635</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator</a> <a class="code" href="classtree.html#0d09fe9fd34fbfc9c9e4e28cb694448e" title="Return iterator to the end of the tree.">tree<T, tree_node_allocator>::end</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>& pos)<span class="keyword"> const</span>
562
558
<a name="l00636"></a>00636 <span class="keyword"> </span>{
563
<a name="l00637"></a>00637 <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> ret(0);
564
<a name="l00638"></a>00638 ret.parent_=pos.node;
559
<a name="l00637"></a>00637 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> ret(0);
560
<a name="l00638"></a>00638 ret.<a class="code" href="classtree_1_1sibling__iterator.html#204f7449ee908f982d21cc3d334d25bc">parent_</a>=pos.node;
565
561
<a name="l00639"></a>00639 <span class="keywordflow">return</span> ret;
566
562
<a name="l00640"></a>00640 }
567
563
<a name="l00641"></a>00641
568
564
<a name="l00642"></a>00642 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
569
565
<a name="l00643"></a>00643 <span class="keyword">template</span> <<span class="keyword">typename</span> iter>
570
<a name="l00644"></a><a class="code" href="classtree.html#a00c1035eb3750d402f0830196264e7f">00644</a> iter <a class="code" href="classtree.html#a00c1035eb3750d402f0830196264e7f">tree<T, tree_node_allocator>::parent</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>)<span class="keyword"> const</span>
566
<a name="l00644"></a><a class="code" href="classtree.html#aaaa1622d2d58ecda846640bd8f8bd28">00644</a> iter <a class="code" href="classtree.html#aaaa1622d2d58ecda846640bd8f8bd28" title="Return iterator to the parent of a node.">tree<T, tree_node_allocator>::parent</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>)<span class="keyword"> const</span>
571
567
<a name="l00645"></a>00645 <span class="keyword"> </span>{
572
568
<a name="l00646"></a>00646 assert(position.node!=0);
573
569
<a name="l00647"></a>00647 <span class="keywordflow">return</span> iter(position.node->parent);
633
629
<a name="l00707"></a>00707
634
630
<a name="l00708"></a>00708 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
635
631
<a name="l00709"></a>00709 <span class="keyword">template</span> <<span class="keyword">typename</span> iter>
636
<a name="l00710"></a><a class="code" href="classtree.html#61f096e7fbd483ff1fc1b56fe25ffcf3">00710</a> iter <a class="code" href="classtree.html#61f096e7fbd483ff1fc1b56fe25ffcf3">tree<T, tree_node_allocator>::append_child</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>)
632
<a name="l00710"></a><a class="code" href="classtree.html#8d68e95f5088d48cb54fd6ae381729f0">00710</a> iter <a class="code" href="classtree.html#8d68e95f5088d48cb54fd6ae381729f0" title="Insert empty node as last child of node pointed to by position.">tree<T, tree_node_allocator>::append_child</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>)
637
633
<a name="l00711"></a>00711 {
638
<a name="l00712"></a>00712 assert(position.node!=<a class="code" href="classtree.html#fbb20670ecc61fe9ad3e7bd502227397">head</a>);
634
<a name="l00712"></a>00712 assert(position.node!=<a class="code" href="classtree.html#10991cbf1497e125c0ef04d6e292e32b">head</a>);
639
635
<a name="l00713"></a>00713
640
<a name="l00714"></a>00714 <a class="code" href="classtree__node__.html">tree_node</a>* tmp = alloc_.allocate(1,0);
641
<a name="l00715"></a>00715 <a class="code" href="namespacekp.html#cc3b0ad9bfc78d3b604dfb285d01d3e5">kp::constructor</a>(&tmp-><a class="code" href="classtree__node__.html#ec3d00d908b82e0d429a431e566fed95">data</a>);
642
<a name="l00716"></a>00716 tmp-><a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>=0;
643
<a name="l00717"></a>00717 tmp-><a class="code" href="classtree__node__.html#f8b222dacdcdf6ca9f24f7a410e36f20">last_child</a>=0;
636
<a name="l00714"></a>00714 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a>* tmp = alloc_.allocate(1,0);
637
<a name="l00715"></a>00715 <a class="code" href="namespacekp.html#d1c6c23984a78bfc8336c7ca244d6f1c">kp::constructor</a>(&tmp-><a class="code" href="classtree__node__.html#4c15077a3ad0552413d1268ee4be1bef">data</a>);
638
<a name="l00716"></a>00716 tmp-><a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>=0;
639
<a name="l00717"></a>00717 tmp-><a class="code" href="classtree__node__.html#611d3c41c716dae6bf2012e3d9152933">last_child</a>=0;
644
640
<a name="l00718"></a>00718
645
<a name="l00719"></a>00719 tmp-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>=position.node;
641
<a name="l00719"></a>00719 tmp-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>=position.node;
646
642
<a name="l00720"></a>00720 <span class="keywordflow">if</span>(position.node->last_child!=0) {
647
643
<a name="l00721"></a>00721 position.node->last_child->next_sibling=tmp;
648
644
<a name="l00722"></a>00722 }
649
645
<a name="l00723"></a>00723 <span class="keywordflow">else</span> {
650
<a name="l00724"></a>00724 position.node-><a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>=tmp;
646
<a name="l00724"></a>00724 position.node-><a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>=tmp;
651
647
<a name="l00725"></a>00725 }
652
<a name="l00726"></a>00726 tmp-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=position.node->last_child;
648
<a name="l00726"></a>00726 tmp-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=position.node->last_child;
653
649
<a name="l00727"></a>00727 position.node->last_child=tmp;
654
<a name="l00728"></a>00728 tmp-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=0;
650
<a name="l00728"></a>00728 tmp-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=0;
655
651
<a name="l00729"></a>00729 <span class="keywordflow">return</span> tmp;
656
652
<a name="l00730"></a>00730 }
657
653
<a name="l00731"></a>00731
658
654
<a name="l00732"></a>00732 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
659
655
<a name="l00733"></a>00733 <span class="keyword">template</span> <<span class="keyword">class</span> iter>
660
<a name="l00734"></a><a class="code" href="classtree.html#49df1c6371247b89892e0bb703a3074c">00734</a> iter <a class="code" href="classtree.html#61f096e7fbd483ff1fc1b56fe25ffcf3">tree<T, tree_node_allocator>::append_child</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, <span class="keyword">const</span> T& x)
656
<a name="l00734"></a><a class="code" href="classtree.html#9318fa77c4e10ec0a9a26a0d08f182a2">00734</a> iter <a class="code" href="classtree.html#8d68e95f5088d48cb54fd6ae381729f0" title="Insert empty node as last child of node pointed to by position.">tree<T, tree_node_allocator>::append_child</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <span class="keyword">const</span> T& x)
661
657
<a name="l00735"></a>00735 {
662
658
<a name="l00736"></a>00736 <span class="comment">// If your program fails here you probably used 'append_child' to add the top</span>
663
659
<a name="l00737"></a>00737 <span class="comment">// node to an empty tree. From version 1.45 the top element should be added</span>
664
660
<a name="l00738"></a>00738 <span class="comment">// using 'insert'. See the documentation for further information, and sorry about</span>
665
661
<a name="l00739"></a>00739 <span class="comment">// the API change.</span>
666
<a name="l00740"></a>00740 assert(position.node!=<a class="code" href="classtree.html#fbb20670ecc61fe9ad3e7bd502227397">head</a>);
662
<a name="l00740"></a>00740 assert(position.node!=<a class="code" href="classtree.html#10991cbf1497e125c0ef04d6e292e32b">head</a>);
667
663
<a name="l00741"></a>00741
668
<a name="l00742"></a>00742 <a class="code" href="classtree__node__.html">tree_node</a>* tmp = alloc_.allocate(1,0);
669
<a name="l00743"></a>00743 <a class="code" href="namespacekp.html#cc3b0ad9bfc78d3b604dfb285d01d3e5">kp::constructor</a>(&tmp-><a class="code" href="classtree__node__.html#ec3d00d908b82e0d429a431e566fed95">data</a>, x);
670
<a name="l00744"></a>00744 tmp-><a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>=0;
671
<a name="l00745"></a>00745 tmp-><a class="code" href="classtree__node__.html#f8b222dacdcdf6ca9f24f7a410e36f20">last_child</a>=0;
664
<a name="l00742"></a>00742 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a>* tmp = alloc_.allocate(1,0);
665
<a name="l00743"></a>00743 <a class="code" href="namespacekp.html#d1c6c23984a78bfc8336c7ca244d6f1c">kp::constructor</a>(&tmp-><a class="code" href="classtree__node__.html#4c15077a3ad0552413d1268ee4be1bef">data</a>, x);
666
<a name="l00744"></a>00744 tmp-><a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>=0;
667
<a name="l00745"></a>00745 tmp-><a class="code" href="classtree__node__.html#611d3c41c716dae6bf2012e3d9152933">last_child</a>=0;
672
668
<a name="l00746"></a>00746
673
<a name="l00747"></a>00747 tmp-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>=position.node;
669
<a name="l00747"></a>00747 tmp-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>=position.node;
674
670
<a name="l00748"></a>00748 <span class="keywordflow">if</span>(position.node->last_child!=0) {
675
671
<a name="l00749"></a>00749 position.node->last_child->next_sibling=tmp;
676
672
<a name="l00750"></a>00750 }
677
673
<a name="l00751"></a>00751 <span class="keywordflow">else</span> {
678
<a name="l00752"></a>00752 position.node-><a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>=tmp;
674
<a name="l00752"></a>00752 position.node-><a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>=tmp;
679
675
<a name="l00753"></a>00753 }
680
<a name="l00754"></a>00754 tmp-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=position.node->last_child;
676
<a name="l00754"></a>00754 tmp-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=position.node->last_child;
681
677
<a name="l00755"></a>00755 position.node->last_child=tmp;
682
<a name="l00756"></a>00756 tmp-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=0;
678
<a name="l00756"></a>00756 tmp-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=0;
683
679
<a name="l00757"></a>00757 <span class="keywordflow">return</span> tmp;
684
680
<a name="l00758"></a>00758 }
685
681
<a name="l00759"></a>00759
686
682
<a name="l00760"></a>00760 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
687
683
<a name="l00761"></a>00761 <span class="keyword">template</span> <<span class="keyword">class</span> iter>
688
<a name="l00762"></a><a class="code" href="classtree.html#c35cc7e116ac7caced91fa1ae129073a">00762</a> iter <a class="code" href="classtree.html#61f096e7fbd483ff1fc1b56fe25ffcf3">tree<T, tree_node_allocator>::append_child</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, iter other)
684
<a name="l00762"></a><a class="code" href="classtree.html#1fb4734b783fed4a66c24130af67316e">00762</a> iter <a class="code" href="classtree.html#8d68e95f5088d48cb54fd6ae381729f0" title="Insert empty node as last child of node pointed to by position.">tree<T, tree_node_allocator>::append_child</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, iter other)
689
685
<a name="l00763"></a>00763 {
690
<a name="l00764"></a>00764 assert(position.node!=<a class="code" href="classtree.html#fbb20670ecc61fe9ad3e7bd502227397">head</a>);
686
<a name="l00764"></a>00764 assert(position.node!=<a class="code" href="classtree.html#10991cbf1497e125c0ef04d6e292e32b">head</a>);
691
687
<a name="l00765"></a>00765
692
<a name="l00766"></a>00766 <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> aargh=<a class="code" href="classtree.html#61f096e7fbd483ff1fc1b56fe25ffcf3">append_child</a>(position, <a class="code" href="classtree.html#6e12b3e8e7e08b824ea27a9ca7fa49da">value_type</a>());
693
<a name="l00767"></a>00767 <span class="keywordflow">return</span> <a class="code" href="classtree.html#3839ca59210cc5171bc768552cc82dbe">replace</a>(aargh, other);
688
<a name="l00766"></a>00766 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> aargh=<a class="code" href="classtree.html#8d68e95f5088d48cb54fd6ae381729f0" title="Insert empty node as last child of node pointed to by position.">append_child</a>(position, <a class="code" href="classtree.html#1e7bcd21e7420f7922a1bca79080acfa" title="Value of the data stored at a node.">value_type</a>());
689
<a name="l00767"></a>00767 <span class="keywordflow">return</span> <a class="code" href="classtree.html#4885e968c82655ebebea5d0927b7e9f4" title="Replace node at &#39;position&#39; with other node (keeping same children); &#39;position&#39;...">replace</a>(aargh, other);
694
690
<a name="l00768"></a>00768 }
695
691
<a name="l00769"></a>00769
696
692
<a name="l00770"></a>00770 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
697
693
<a name="l00771"></a>00771 <span class="keyword">template</span> <<span class="keyword">class</span> iter>
698
<a name="l00772"></a><a class="code" href="classtree.html#b73148412a532d3216fb9741bc8c4e67">00772</a> iter <a class="code" href="classtree.html#b73148412a532d3216fb9741bc8c4e67">tree<T, tree_node_allocator>::append_children</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> from, <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> to)
694
<a name="l00772"></a><a class="code" href="classtree.html#92ab22e0a98d8899c0d1b6c9d0a85465">00772</a> iter <a class="code" href="classtree.html#92ab22e0a98d8899c0d1b6c9d0a85465" title="Append the nodes in the from-to range (plus their children) as children of position...">tree<T, tree_node_allocator>::append_children</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> from, <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> to)
699
695
<a name="l00773"></a>00773 {
700
696
<a name="l00774"></a>00774 iter ret=from;
701
697
<a name="l00775"></a>00775
702
698
<a name="l00776"></a>00776 <span class="keywordflow">while</span>(from!=to) {
703
<a name="l00777"></a>00777 <a class="code" href="classtree.html#6c41a7abd2827c9193f03ea0a51e8e30">insert_subtree</a>(position.end(), from);
699
<a name="l00777"></a>00777 <a class="code" href="classtree.html#d66d55d58b48ce0a8d7a5b41abe923d5" title="Insert node (with children) pointed to by subtree as previous sibling of node pointed...">insert_subtree</a>(position.end(), from);
704
700
<a name="l00778"></a>00778 ++from;
705
701
<a name="l00779"></a>00779 }
706
702
<a name="l00780"></a>00780 <span class="keywordflow">return</span> ret;
707
703
<a name="l00781"></a>00781 }
708
704
<a name="l00782"></a>00782
709
705
<a name="l00783"></a>00783 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
710
<a name="l00784"></a><a class="code" href="classtree.html#e6749fed3d80f2b74bb6319c4eb2af73">00784</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::pre_order_iterator</a> <a class="code" href="classtree.html#e6749fed3d80f2b74bb6319c4eb2af73">tree<T, tree_node_allocator>::set_head</a>(<span class="keyword">const</span> T& x)
706
<a name="l00784"></a><a class="code" href="classtree.html#f11d736ea971ab93651350161f5a7535">00784</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::pre_order_iterator</a> <a class="code" href="classtree.html#f11d736ea971ab93651350161f5a7535" title="Short-hand to insert topmost node in otherwise empty tree.">tree<T, tree_node_allocator>::set_head</a>(<span class="keyword">const</span> T& x)
711
707
<a name="l00785"></a>00785 {
712
<a name="l00786"></a>00786 assert(<a class="code" href="classtree.html#fbb20670ecc61fe9ad3e7bd502227397">head</a>-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>==<a class="code" href="classtree.html#e45df182e3702084c6bd147d6479cc08">feet</a>);
713
<a name="l00787"></a>00787 <span class="keywordflow">return</span> <a class="code" href="classtree.html#fb3e3d6dd64410aa9af067e315c87360">insert</a>(<a class="code" href="classtree.html#7e3cc3f2e7a5fb4edd554c9978642c29">iterator</a>(<a class="code" href="classtree.html#e45df182e3702084c6bd147d6479cc08">feet</a>), x);
708
<a name="l00786"></a>00786 assert(<a class="code" href="classtree.html#10991cbf1497e125c0ef04d6e292e32b">head</a>-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>==<a class="code" href="classtree.html#e1dbb80115ba483e37d081a2256c239b">feet</a>);
709
<a name="l00787"></a>00787 <span class="keywordflow">return</span> <a class="code" href="classtree.html#c3d19d3a42f91618267674f2c236aad9" title="Insert node as previous sibling of node pointed to by position.">insert</a>(<a class="code" href="classtree.html#2079982538b88d21fe1ccea34fe7ce0e" title="The default iterator type throughout the tree class.">iterator</a>(<a class="code" href="classtree.html#e1dbb80115ba483e37d081a2256c239b">feet</a>), x);
714
710
<a name="l00788"></a>00788 }
715
711
<a name="l00789"></a>00789
716
712
<a name="l00790"></a>00790 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
717
713
<a name="l00791"></a>00791 <span class="keyword">template</span> <<span class="keyword">class</span> iter>
718
<a name="l00792"></a><a class="code" href="classtree.html#fb3e3d6dd64410aa9af067e315c87360">00792</a> iter <a class="code" href="classtree.html#fb3e3d6dd64410aa9af067e315c87360">tree<T, tree_node_allocator>::insert</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, <span class="keyword">const</span> T& x)
714
<a name="l00792"></a><a class="code" href="classtree.html#c3d19d3a42f91618267674f2c236aad9">00792</a> iter <a class="code" href="classtree.html#c3d19d3a42f91618267674f2c236aad9" title="Insert node as previous sibling of node pointed to by position.">tree<T, tree_node_allocator>::insert</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <span class="keyword">const</span> T& x)
719
715
<a name="l00793"></a>00793 {
720
716
<a name="l00794"></a>00794 <span class="keywordflow">if</span>(position.node==0) {
721
<a name="l00795"></a>00795 position.node=<a class="code" href="classtree.html#e45df182e3702084c6bd147d6479cc08">feet</a>; <span class="comment">// Backward compatibility: when calling insert on a null node,</span>
717
<a name="l00795"></a>00795 position.node=<a class="code" href="classtree.html#e1dbb80115ba483e37d081a2256c239b">feet</a>; <span class="comment">// Backward compatibility: when calling insert on a null node,</span>
722
718
<a name="l00796"></a>00796 <span class="comment">// insert before the feet.</span>
723
719
<a name="l00797"></a>00797 }
724
<a name="l00798"></a>00798 <a class="code" href="classtree__node__.html">tree_node</a>* tmp = alloc_.allocate(1,0);
725
<a name="l00799"></a>00799 <a class="code" href="namespacekp.html#cc3b0ad9bfc78d3b604dfb285d01d3e5">kp::constructor</a>(&tmp-><a class="code" href="classtree__node__.html#ec3d00d908b82e0d429a431e566fed95">data</a>, x);
726
<a name="l00800"></a>00800 tmp-><a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>=0;
727
<a name="l00801"></a>00801 tmp-><a class="code" href="classtree__node__.html#f8b222dacdcdf6ca9f24f7a410e36f20">last_child</a>=0;
720
<a name="l00798"></a>00798 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a>* tmp = alloc_.allocate(1,0);
721
<a name="l00799"></a>00799 <a class="code" href="namespacekp.html#d1c6c23984a78bfc8336c7ca244d6f1c">kp::constructor</a>(&tmp-><a class="code" href="classtree__node__.html#4c15077a3ad0552413d1268ee4be1bef">data</a>, x);
722
<a name="l00800"></a>00800 tmp-><a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>=0;
723
<a name="l00801"></a>00801 tmp-><a class="code" href="classtree__node__.html#611d3c41c716dae6bf2012e3d9152933">last_child</a>=0;
728
724
<a name="l00802"></a>00802
729
<a name="l00803"></a>00803 tmp-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>=position.node->parent;
730
<a name="l00804"></a>00804 tmp-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=position.node;
731
<a name="l00805"></a>00805 tmp-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=position.node->prev_sibling;
725
<a name="l00803"></a>00803 tmp-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>=position.node->parent;
726
<a name="l00804"></a>00804 tmp-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=position.node;
727
<a name="l00805"></a>00805 tmp-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=position.node->prev_sibling;
732
728
<a name="l00806"></a>00806 position.node->prev_sibling=tmp;
733
729
<a name="l00807"></a>00807
734
<a name="l00808"></a>00808 <span class="keywordflow">if</span>(tmp-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>==0) {
735
<a name="l00809"></a>00809 <span class="keywordflow">if</span>(tmp-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>) <span class="comment">// when inserting nodes at the head, there is no parent</span>
736
<a name="l00810"></a>00810 tmp-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>->first_child=tmp;
730
<a name="l00808"></a>00808 <span class="keywordflow">if</span>(tmp-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>==0) {
731
<a name="l00809"></a>00809 <span class="keywordflow">if</span>(tmp-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>) <span class="comment">// when inserting nodes at the head, there is no parent</span>
732
<a name="l00810"></a>00810 tmp-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>->first_child=tmp;
737
733
<a name="l00811"></a>00811 }
738
734
<a name="l00812"></a>00812 <span class="keywordflow">else</span>
739
<a name="l00813"></a>00813 tmp-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>->next_sibling=tmp;
735
<a name="l00813"></a>00813 tmp-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>->next_sibling=tmp;
740
736
<a name="l00814"></a>00814 <span class="keywordflow">return</span> tmp;
741
737
<a name="l00815"></a>00815 }
742
738
<a name="l00816"></a>00816
743
739
<a name="l00817"></a>00817 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
744
<a name="l00818"></a><a class="code" href="classtree.html#e3847641b24788feda5a44c241d0054b">00818</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator</a> <a class="code" href="classtree.html#fb3e3d6dd64410aa9af067e315c87360">tree<T, tree_node_allocator>::insert</a>(<a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, <span class="keyword">const</span> T& x)
740
<a name="l00818"></a><a class="code" href="classtree.html#429bbd485078981ef83b59a779d9f947">00818</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator</a> <a class="code" href="classtree.html#c3d19d3a42f91618267674f2c236aad9" title="Insert node as previous sibling of node pointed to by position.">tree<T, tree_node_allocator>::insert</a>(<a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <span class="keyword">const</span> T& x)
745
741
<a name="l00819"></a>00819 {
746
<a name="l00820"></a>00820 <a class="code" href="classtree__node__.html">tree_node</a>* tmp = alloc_.allocate(1,0);
747
<a name="l00821"></a>00821 <a class="code" href="namespacekp.html#cc3b0ad9bfc78d3b604dfb285d01d3e5">kp::constructor</a>(&tmp-><a class="code" href="classtree__node__.html#ec3d00d908b82e0d429a431e566fed95">data</a>, x);
748
<a name="l00822"></a>00822 tmp-><a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>=0;
749
<a name="l00823"></a>00823 tmp-><a class="code" href="classtree__node__.html#f8b222dacdcdf6ca9f24f7a410e36f20">last_child</a>=0;
742
<a name="l00820"></a>00820 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a>* tmp = alloc_.allocate(1,0);
743
<a name="l00821"></a>00821 <a class="code" href="namespacekp.html#d1c6c23984a78bfc8336c7ca244d6f1c">kp::constructor</a>(&tmp-><a class="code" href="classtree__node__.html#4c15077a3ad0552413d1268ee4be1bef">data</a>, x);
744
<a name="l00822"></a>00822 tmp-><a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>=0;
745
<a name="l00823"></a>00823 tmp-><a class="code" href="classtree__node__.html#611d3c41c716dae6bf2012e3d9152933">last_child</a>=0;
750
746
<a name="l00824"></a>00824
751
<a name="l00825"></a>00825 tmp-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=<a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>.node;
752
<a name="l00826"></a>00826 <span class="keywordflow">if</span>(<a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>.node==0) { <span class="comment">// iterator points to end of a subtree</span>
753
<a name="l00827"></a>00827 tmp-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>=<a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>.parent_;
754
<a name="l00828"></a>00828 tmp-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=<a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>.range_last();
755
<a name="l00829"></a>00829 tmp-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>->last_child=tmp;
747
<a name="l00825"></a>00825 tmp-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=position.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>;
748
<a name="l00826"></a>00826 <span class="keywordflow">if</span>(position.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>==0) { <span class="comment">// iterator points to end of a subtree</span>
749
<a name="l00827"></a>00827 tmp-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>=position.<a class="code" href="classtree_1_1sibling__iterator.html#204f7449ee908f982d21cc3d334d25bc">parent_</a>;
750
<a name="l00828"></a>00828 tmp-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=position.<a class="code" href="classtree_1_1sibling__iterator.html#85438655c23ba60d2a4f83787e3dcf48">range_last</a>();
751
<a name="l00829"></a>00829 tmp-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>->last_child=tmp;
756
752
<a name="l00830"></a>00830 }
757
753
<a name="l00831"></a>00831 <span class="keywordflow">else</span> {
758
<a name="l00832"></a>00832 tmp-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>=<a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>.node->parent;
759
<a name="l00833"></a>00833 tmp-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=<a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>.node->prev_sibling;
760
<a name="l00834"></a>00834 <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>.node->prev_sibling=tmp;
754
<a name="l00832"></a>00832 tmp-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>=position.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>;
755
<a name="l00833"></a>00833 tmp-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=position.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
756
<a name="l00834"></a>00834 position.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=tmp;
761
757
<a name="l00835"></a>00835 }
762
758
<a name="l00836"></a>00836
763
<a name="l00837"></a>00837 <span class="keywordflow">if</span>(tmp-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>==0) {
764
<a name="l00838"></a>00838 <span class="keywordflow">if</span>(tmp-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>) <span class="comment">// when inserting nodes at the head, there is no parent</span>
765
<a name="l00839"></a>00839 tmp-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>->first_child=tmp;
759
<a name="l00837"></a>00837 <span class="keywordflow">if</span>(tmp-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>==0) {
760
<a name="l00838"></a>00838 <span class="keywordflow">if</span>(tmp-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>) <span class="comment">// when inserting nodes at the head, there is no parent</span>
761
<a name="l00839"></a>00839 tmp-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>->first_child=tmp;
766
762
<a name="l00840"></a>00840 }
767
763
<a name="l00841"></a>00841 <span class="keywordflow">else</span>
768
<a name="l00842"></a>00842 tmp-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>->next_sibling=tmp;
764
<a name="l00842"></a>00842 tmp-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>->next_sibling=tmp;
769
765
<a name="l00843"></a>00843 <span class="keywordflow">return</span> tmp;
770
766
<a name="l00844"></a>00844 }
771
767
<a name="l00845"></a>00845
772
768
<a name="l00846"></a>00846 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
773
769
<a name="l00847"></a>00847 <span class="keyword">template</span> <<span class="keyword">class</span> iter>
774
<a name="l00848"></a><a class="code" href="classtree.html#9be9c658ab428eb962c55bef3f872b47">00848</a> iter <a class="code" href="classtree.html#9be9c658ab428eb962c55bef3f872b47">tree<T, tree_node_allocator>::insert_after</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, <span class="keyword">const</span> T& x)
770
<a name="l00848"></a><a class="code" href="classtree.html#215ab56bd13f59c661eb2298e373ff3e">00848</a> iter <a class="code" href="classtree.html#215ab56bd13f59c661eb2298e373ff3e" title="Insert node as next sibling of node pointed to by position.">tree<T, tree_node_allocator>::insert_after</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <span class="keyword">const</span> T& x)
775
771
<a name="l00849"></a>00849 {
776
<a name="l00850"></a>00850 <a class="code" href="classtree__node__.html">tree_node</a>* tmp = alloc_.allocate(1,0);
777
<a name="l00851"></a>00851 <a class="code" href="namespacekp.html#cc3b0ad9bfc78d3b604dfb285d01d3e5">kp::constructor</a>(&tmp-><a class="code" href="classtree__node__.html#ec3d00d908b82e0d429a431e566fed95">data</a>, x);
778
<a name="l00852"></a>00852 tmp-><a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>=0;
779
<a name="l00853"></a>00853 tmp-><a class="code" href="classtree__node__.html#f8b222dacdcdf6ca9f24f7a410e36f20">last_child</a>=0;
772
<a name="l00850"></a>00850 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a>* tmp = alloc_.allocate(1,0);
773
<a name="l00851"></a>00851 <a class="code" href="namespacekp.html#d1c6c23984a78bfc8336c7ca244d6f1c">kp::constructor</a>(&tmp-><a class="code" href="classtree__node__.html#4c15077a3ad0552413d1268ee4be1bef">data</a>, x);
774
<a name="l00852"></a>00852 tmp-><a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>=0;
775
<a name="l00853"></a>00853 tmp-><a class="code" href="classtree__node__.html#611d3c41c716dae6bf2012e3d9152933">last_child</a>=0;
780
776
<a name="l00854"></a>00854
781
<a name="l00855"></a>00855 tmp-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>=position.node->parent;
782
<a name="l00856"></a>00856 tmp-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=position.node;
783
<a name="l00857"></a>00857 tmp-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=position.node->next_sibling;
777
<a name="l00855"></a>00855 tmp-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>=position.node->parent;
778
<a name="l00856"></a>00856 tmp-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=position.node;
779
<a name="l00857"></a>00857 tmp-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=position.node->next_sibling;
784
780
<a name="l00858"></a>00858 position.node->next_sibling=tmp;
785
781
<a name="l00859"></a>00859
786
<a name="l00860"></a>00860 <span class="keywordflow">if</span>(tmp-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>==0) {
787
<a name="l00861"></a>00861 <span class="keywordflow">if</span>(tmp-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>) <span class="comment">// when inserting nodes at the head, there is no parent</span>
788
<a name="l00862"></a>00862 tmp-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>->last_child=tmp;
782
<a name="l00860"></a>00860 <span class="keywordflow">if</span>(tmp-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>==0) {
783
<a name="l00861"></a>00861 <span class="keywordflow">if</span>(tmp-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>) <span class="comment">// when inserting nodes at the head, there is no parent</span>
784
<a name="l00862"></a>00862 tmp-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>->last_child=tmp;
789
785
<a name="l00863"></a>00863 }
790
786
<a name="l00864"></a>00864 <span class="keywordflow">else</span> {
791
<a name="l00865"></a>00865 tmp-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>->prev_sibling=tmp;
787
<a name="l00865"></a>00865 tmp-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>->prev_sibling=tmp;
792
788
<a name="l00866"></a>00866 }
793
789
<a name="l00867"></a>00867 <span class="keywordflow">return</span> tmp;
794
790
<a name="l00868"></a>00868 }
795
791
<a name="l00869"></a>00869
796
792
<a name="l00870"></a>00870 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
797
793
<a name="l00871"></a>00871 <span class="keyword">template</span> <<span class="keyword">class</span> iter>
798
<a name="l00872"></a><a class="code" href="classtree.html#6c41a7abd2827c9193f03ea0a51e8e30">00872</a> iter <a class="code" href="classtree.html#6c41a7abd2827c9193f03ea0a51e8e30">tree<T, tree_node_allocator>::insert_subtree</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, <span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>& subtree)
794
<a name="l00872"></a><a class="code" href="classtree.html#d66d55d58b48ce0a8d7a5b41abe923d5">00872</a> iter <a class="code" href="classtree.html#d66d55d58b48ce0a8d7a5b41abe923d5" title="Insert node (with children) pointed to by subtree as previous sibling of node pointed...">tree<T, tree_node_allocator>::insert_subtree</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>& <a class="code" href="classtree.html#db61bebed6c56eb5641b0b7fab7fe625" title="Extract a new tree formed by the range of siblings plus all their children.">subtree</a>)
799
795
<a name="l00873"></a>00873 {
800
796
<a name="l00874"></a>00874 <span class="comment">// insert dummy</span>
801
<a name="l00875"></a>00875 iter it=<a class="code" href="classtree.html#fb3e3d6dd64410aa9af067e315c87360">insert</a>(position, <a class="code" href="classtree.html#6e12b3e8e7e08b824ea27a9ca7fa49da">value_type</a>());
797
<a name="l00875"></a>00875 iter it=<a class="code" href="classtree.html#c3d19d3a42f91618267674f2c236aad9" title="Insert node as previous sibling of node pointed to by position.">insert</a>(position, <a class="code" href="classtree.html#1e7bcd21e7420f7922a1bca79080acfa" title="Value of the data stored at a node.">value_type</a>());
802
798
<a name="l00876"></a>00876 <span class="comment">// replace dummy with subtree</span>
803
<a name="l00877"></a>00877 <span class="keywordflow">return</span> <a class="code" href="classtree.html#3839ca59210cc5171bc768552cc82dbe">replace</a>(it, <a class="code" href="classtree.html#e0c63efd151b313a372d01f2dae19c0d">subtree</a>);
799
<a name="l00877"></a>00877 <span class="keywordflow">return</span> <a class="code" href="classtree.html#4885e968c82655ebebea5d0927b7e9f4" title="Replace node at &#39;position&#39; with other node (keeping same children); &#39;position&#39;...">replace</a>(it, subtree);
804
800
<a name="l00878"></a>00878 }
805
801
<a name="l00879"></a>00879
806
802
<a name="l00880"></a>00880 <span class="comment">// template <class T, class tree_node_allocator></span>
815
811
<a name="l00889"></a>00889
816
812
<a name="l00890"></a>00890 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
817
813
<a name="l00891"></a>00891 <span class="keyword">template</span> <<span class="keyword">class</span> iter>
818
<a name="l00892"></a><a class="code" href="classtree.html#3839ca59210cc5171bc768552cc82dbe">00892</a> iter <a class="code" href="classtree.html#3839ca59210cc5171bc768552cc82dbe">tree<T, tree_node_allocator>::replace</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, <span class="keyword">const</span> T& x)
814
<a name="l00892"></a><a class="code" href="classtree.html#4885e968c82655ebebea5d0927b7e9f4">00892</a> iter <a class="code" href="classtree.html#4885e968c82655ebebea5d0927b7e9f4" title="Replace node at &#39;position&#39; with other node (keeping same children); &#39;position&#39;...">tree<T, tree_node_allocator>::replace</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <span class="keyword">const</span> T& x)
819
815
<a name="l00893"></a>00893 {
820
<a name="l00894"></a>00894 <a class="code" href="namespacekp.html#734effe09627ef03b0d12f076775c783">kp::destructor</a>(&position.node->data);
821
<a name="l00895"></a>00895 <a class="code" href="namespacekp.html#cc3b0ad9bfc78d3b604dfb285d01d3e5">kp::constructor</a>(&position.node->data, x);
816
<a name="l00894"></a>00894 <a class="code" href="namespacekp.html#a6813c11eeb1c091cdd1eff62de70914">kp::destructor</a>(&position.node->data);
817
<a name="l00895"></a>00895 <a class="code" href="namespacekp.html#d1c6c23984a78bfc8336c7ca244d6f1c">kp::constructor</a>(&position.node->data, x);
822
818
<a name="l00896"></a>00896 <span class="keywordflow">return</span> position;
823
819
<a name="l00897"></a>00897 }
824
820
<a name="l00898"></a>00898
825
821
<a name="l00899"></a>00899 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
826
822
<a name="l00900"></a>00900 <span class="keyword">template</span> <<span class="keyword">class</span> iter>
827
<a name="l00901"></a><a class="code" href="classtree.html#d4c8f84d956933e4137769a126b02cab">00901</a> iter <a class="code" href="classtree.html#3839ca59210cc5171bc768552cc82dbe">tree<T, tree_node_allocator>::replace</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, <span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>& from)
823
<a name="l00901"></a><a class="code" href="classtree.html#5d2ad4532598f26c84b1ab0ec84a5d62">00901</a> iter <a class="code" href="classtree.html#4885e968c82655ebebea5d0927b7e9f4" title="Replace node at &#39;position&#39; with other node (keeping same children); &#39;position&#39;...">tree<T, tree_node_allocator>::replace</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>& from)
828
824
<a name="l00902"></a>00902 {
829
<a name="l00903"></a>00903 assert(position.node!=<a class="code" href="classtree.html#fbb20670ecc61fe9ad3e7bd502227397">head</a>);
830
<a name="l00904"></a>00904 <a class="code" href="classtree__node__.html">tree_node</a> *current_from=from.node;
831
<a name="l00905"></a>00905 <a class="code" href="classtree__node__.html">tree_node</a> *start_from=from.node;
832
<a name="l00906"></a>00906 <a class="code" href="classtree__node__.html">tree_node</a> *current_to =position.node;
825
<a name="l00903"></a>00903 assert(position.node!=<a class="code" href="classtree.html#10991cbf1497e125c0ef04d6e292e32b">head</a>);
826
<a name="l00904"></a>00904 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *current_from=from.node;
827
<a name="l00905"></a>00905 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *start_from=from.node;
828
<a name="l00906"></a>00906 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *current_to =position.node;
833
829
<a name="l00907"></a>00907
834
830
<a name="l00908"></a>00908 <span class="comment">// replace the node at position with head of the replacement tree at from</span>
835
<a name="l00909"></a>00909 <a class="code" href="classtree.html#0a3ebbed379f55e5550a7d213d0513d2">erase_children</a>(position);
836
<a name="l00910"></a>00910 <a class="code" href="classtree__node__.html">tree_node</a>* tmp = alloc_.allocate(1,0);
837
<a name="l00911"></a>00911 <a class="code" href="namespacekp.html#cc3b0ad9bfc78d3b604dfb285d01d3e5">kp::constructor</a>(&tmp-><a class="code" href="classtree__node__.html#ec3d00d908b82e0d429a431e566fed95">data</a>, (*from));
838
<a name="l00912"></a>00912 tmp-><a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>=0;
839
<a name="l00913"></a>00913 tmp-><a class="code" href="classtree__node__.html#f8b222dacdcdf6ca9f24f7a410e36f20">last_child</a>=0;
840
<a name="l00914"></a>00914 <span class="keywordflow">if</span>(current_to-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>==0) {
841
<a name="l00915"></a>00915 current_to-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>->first_child=tmp;
831
<a name="l00909"></a>00909 <a class="code" href="classtree.html#05d5fd71c206efc8ac30df5cd46176bc" title="Erase all children of the node pointed to by iterator.">erase_children</a>(position);
832
<a name="l00910"></a>00910 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a>* tmp = alloc_.allocate(1,0);
833
<a name="l00911"></a>00911 <a class="code" href="namespacekp.html#d1c6c23984a78bfc8336c7ca244d6f1c">kp::constructor</a>(&tmp-><a class="code" href="classtree__node__.html#4c15077a3ad0552413d1268ee4be1bef">data</a>, (*from));
834
<a name="l00912"></a>00912 tmp-><a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>=0;
835
<a name="l00913"></a>00913 tmp-><a class="code" href="classtree__node__.html#611d3c41c716dae6bf2012e3d9152933">last_child</a>=0;
836
<a name="l00914"></a>00914 <span class="keywordflow">if</span>(current_to-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>==0) {
837
<a name="l00915"></a>00915 current_to-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>->first_child=tmp;
842
838
<a name="l00916"></a>00916 }
843
839
<a name="l00917"></a>00917 <span class="keywordflow">else</span> {
844
<a name="l00918"></a>00918 current_to-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>->next_sibling=tmp;
840
<a name="l00918"></a>00918 current_to-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>->next_sibling=tmp;
845
841
<a name="l00919"></a>00919 }
846
<a name="l00920"></a>00920 tmp-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=current_to-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
847
<a name="l00921"></a>00921 <span class="keywordflow">if</span>(current_to-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>==0) {
848
<a name="l00922"></a>00922 current_to-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>->last_child=tmp;
842
<a name="l00920"></a>00920 tmp-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=current_to-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
843
<a name="l00921"></a>00921 <span class="keywordflow">if</span>(current_to-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>==0) {
844
<a name="l00922"></a>00922 current_to-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>->last_child=tmp;
849
845
<a name="l00923"></a>00923 }
850
846
<a name="l00924"></a>00924 <span class="keywordflow">else</span> {
851
<a name="l00925"></a>00925 current_to-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>->prev_sibling=tmp;
847
<a name="l00925"></a>00925 current_to-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>->prev_sibling=tmp;
852
848
<a name="l00926"></a>00926 }
853
<a name="l00927"></a>00927 tmp-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=current_to-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
854
<a name="l00928"></a>00928 tmp-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>=current_to-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>;
855
<a name="l00929"></a>00929 <a class="code" href="namespacekp.html#734effe09627ef03b0d12f076775c783">kp::destructor</a>(&current_to-><a class="code" href="classtree__node__.html#ec3d00d908b82e0d429a431e566fed95">data</a>);
849
<a name="l00927"></a>00927 tmp-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=current_to-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
850
<a name="l00928"></a>00928 tmp-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>=current_to-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>;
851
<a name="l00929"></a>00929 <a class="code" href="namespacekp.html#a6813c11eeb1c091cdd1eff62de70914">kp::destructor</a>(&current_to-><a class="code" href="classtree__node__.html#4c15077a3ad0552413d1268ee4be1bef">data</a>);
856
852
<a name="l00930"></a>00930 alloc_.deallocate(current_to,1);
857
853
<a name="l00931"></a>00931 current_to=tmp;
858
854
<a name="l00932"></a>00932
859
855
<a name="l00933"></a>00933 <span class="comment">// only at this stage can we fix 'last'</span>
860
<a name="l00934"></a>00934 <a class="code" href="classtree__node__.html">tree_node</a> *last=from.node->next_sibling;
856
<a name="l00934"></a>00934 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *last=from.node->next_sibling;
861
857
<a name="l00935"></a>00935
862
<a name="l00936"></a>00936 <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a> toit=tmp;
858
<a name="l00936"></a>00936 <a class="code" href="classtree_1_1pre__order__iterator.html" title="Depth-first iterator, first accessing the node, then its children.">pre_order_iterator</a> toit=tmp;
863
859
<a name="l00937"></a>00937 <span class="comment">// copy all children</span>
864
860
<a name="l00938"></a>00938 <span class="keywordflow">do</span> {
865
861
<a name="l00939"></a>00939 assert(current_from!=0);
866
<a name="l00940"></a>00940 <span class="keywordflow">if</span>(current_from-><a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a> != 0) {
867
<a name="l00941"></a>00941 current_from=current_from-><a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>;
868
<a name="l00942"></a>00942 toit=<a class="code" href="classtree.html#61f096e7fbd483ff1fc1b56fe25ffcf3">append_child</a>(toit, current_from-><a class="code" href="classtree__node__.html#ec3d00d908b82e0d429a431e566fed95">data</a>);
862
<a name="l00940"></a>00940 <span class="keywordflow">if</span>(current_from-><a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a> != 0) {
863
<a name="l00941"></a>00941 current_from=current_from-><a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>;
864
<a name="l00942"></a>00942 toit=<a class="code" href="classtree.html#8d68e95f5088d48cb54fd6ae381729f0" title="Insert empty node as last child of node pointed to by position.">append_child</a>(toit, current_from-><a class="code" href="classtree__node__.html#4c15077a3ad0552413d1268ee4be1bef">data</a>);
869
865
<a name="l00943"></a>00943 }
870
866
<a name="l00944"></a>00944 <span class="keywordflow">else</span> {
871
<a name="l00945"></a>00945 <span class="keywordflow">while</span>(current_from-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>==0 && current_from!=start_from) {
872
<a name="l00946"></a>00946 current_from=current_from-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>;
873
<a name="l00947"></a>00947 toit=<a class="code" href="classtree.html#a00c1035eb3750d402f0830196264e7f">parent</a>(toit);
867
<a name="l00945"></a>00945 <span class="keywordflow">while</span>(current_from-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>==0 && current_from!=start_from) {
868
<a name="l00946"></a>00946 current_from=current_from-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>;
869
<a name="l00947"></a>00947 toit=<a class="code" href="classtree.html#aaaa1622d2d58ecda846640bd8f8bd28" title="Return iterator to the parent of a node.">parent</a>(toit);
874
870
<a name="l00948"></a>00948 assert(current_from!=0);
875
871
<a name="l00949"></a>00949 }
876
<a name="l00950"></a>00950 current_from=current_from-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
872
<a name="l00950"></a>00950 current_from=current_from-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
877
873
<a name="l00951"></a>00951 <span class="keywordflow">if</span>(current_from!=last) {
878
<a name="l00952"></a>00952 toit=<a class="code" href="classtree.html#61f096e7fbd483ff1fc1b56fe25ffcf3">append_child</a>(<a class="code" href="classtree.html#a00c1035eb3750d402f0830196264e7f">parent</a>(toit), current_from-><a class="code" href="classtree__node__.html#ec3d00d908b82e0d429a431e566fed95">data</a>);
874
<a name="l00952"></a>00952 toit=<a class="code" href="classtree.html#8d68e95f5088d48cb54fd6ae381729f0" title="Insert empty node as last child of node pointed to by position.">append_child</a>(<a class="code" href="classtree.html#aaaa1622d2d58ecda846640bd8f8bd28" title="Return iterator to the parent of a node.">parent</a>(toit), current_from-><a class="code" href="classtree__node__.html#4c15077a3ad0552413d1268ee4be1bef">data</a>);
879
875
<a name="l00953"></a>00953 }
880
876
<a name="l00954"></a>00954 }
881
877
<a name="l00955"></a>00955 } <span class="keywordflow">while</span>(current_from!=last);
958
954
<a name="l01032"></a>01032
959
955
<a name="l01033"></a>01033 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
960
956
<a name="l01034"></a>01034 <span class="keyword">template</span> <<span class="keyword">typename</span> iter>
961
<a name="l01035"></a><a class="code" href="classtree.html#8b127e71944f9bd724c8398f948e9192">01035</a> iter <a class="code" href="classtree.html#8b127e71944f9bd724c8398f948e9192">tree<T, tree_node_allocator>::reparent</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> begin, <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> end)
957
<a name="l01035"></a><a class="code" href="classtree.html#32b88523e2d5b6c78381b7da9455be5e">01035</a> iter <a class="code" href="classtree.html#32b88523e2d5b6c78381b7da9455be5e" title="Move nodes in range to be children of &#39;position&#39;.">tree<T, tree_node_allocator>::reparent</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> <a class="code" href="classtree.html#76b3a629c0208d5ae5b4ffcd4492e05e" title="Return iterator to the beginning of the tree.">begin</a>, <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> <a class="code" href="classtree.html#0d09fe9fd34fbfc9c9e4e28cb694448e" title="Return iterator to the end of the tree.">end</a>)
962
958
<a name="l01036"></a>01036 {
963
<a name="l01037"></a>01037 <a class="code" href="classtree__node__.html">tree_node</a> *first=<a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">begin</a>.node;
964
<a name="l01038"></a>01038 <a class="code" href="classtree__node__.html">tree_node</a> *last=first;
965
<a name="l01039"></a>01039 <span class="keywordflow">if</span>(<a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">begin</a>==<a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">end</a>) <span class="keywordflow">return</span> <a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">begin</a>;
959
<a name="l01037"></a>01037 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *first=begin.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>;
960
<a name="l01038"></a>01038 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *last=first;
961
<a name="l01039"></a>01039 <span class="keywordflow">if</span>(begin==end) <span class="keywordflow">return</span> begin;
966
962
<a name="l01040"></a>01040 <span class="comment">// determine last node</span>
967
<a name="l01041"></a>01041 <span class="keywordflow">while</span>((++<a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">begin</a>)!=<a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">end</a>) {
968
<a name="l01042"></a>01042 last=last-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
963
<a name="l01041"></a>01041 <span class="keywordflow">while</span>((++begin)!=end) {
964
<a name="l01042"></a>01042 last=last-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
969
965
<a name="l01043"></a>01043 }
970
966
<a name="l01044"></a>01044 <span class="comment">// move subtree</span>
971
<a name="l01045"></a>01045 <span class="keywordflow">if</span>(first-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>==0) {
972
<a name="l01046"></a>01046 first-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>->first_child=last-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
967
<a name="l01045"></a>01045 <span class="keywordflow">if</span>(first-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>==0) {
968
<a name="l01046"></a>01046 first-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>->first_child=last-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
973
969
<a name="l01047"></a>01047 }
974
970
<a name="l01048"></a>01048 <span class="keywordflow">else</span> {
975
<a name="l01049"></a>01049 first-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>->next_sibling=last-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
971
<a name="l01049"></a>01049 first-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>->next_sibling=last-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
976
972
<a name="l01050"></a>01050 }
977
<a name="l01051"></a>01051 <span class="keywordflow">if</span>(last-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>==0) {
978
<a name="l01052"></a>01052 last-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>->last_child=first-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
973
<a name="l01051"></a>01051 <span class="keywordflow">if</span>(last-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>==0) {
974
<a name="l01052"></a>01052 last-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>->last_child=first-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
979
975
<a name="l01053"></a>01053 }
980
976
<a name="l01054"></a>01054 <span class="keywordflow">else</span> {
981
<a name="l01055"></a>01055 last-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>->prev_sibling=first-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
977
<a name="l01055"></a>01055 last-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>->prev_sibling=first-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
982
978
<a name="l01056"></a>01056 }
983
979
<a name="l01057"></a>01057 <span class="keywordflow">if</span>(position.node->first_child==0) {
984
980
<a name="l01058"></a>01058 position.node->first_child=first;
985
<a name="l01059"></a>01059 position.node-><a class="code" href="classtree__node__.html#f8b222dacdcdf6ca9f24f7a410e36f20">last_child</a>=last;
986
<a name="l01060"></a>01060 first-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=0;
981
<a name="l01059"></a>01059 position.node-><a class="code" href="classtree__node__.html#611d3c41c716dae6bf2012e3d9152933">last_child</a>=last;
982
<a name="l01060"></a>01060 first-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=0;
987
983
<a name="l01061"></a>01061 }
988
984
<a name="l01062"></a>01062 <span class="keywordflow">else</span> {
989
985
<a name="l01063"></a>01063 position.node->last_child->next_sibling=first;
990
<a name="l01064"></a>01064 first-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=position.node->last_child;
986
<a name="l01064"></a>01064 first-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=position.node->last_child;
991
987
<a name="l01065"></a>01065 position.node->last_child=last;
992
988
<a name="l01066"></a>01066 }
993
<a name="l01067"></a>01067 last-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=0;
989
<a name="l01067"></a>01067 last-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=0;
994
990
<a name="l01068"></a>01068
995
<a name="l01069"></a>01069 <a class="code" href="classtree__node__.html">tree_node</a> *pos=first;
991
<a name="l01069"></a>01069 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *pos=first;
996
992
<a name="l01070"></a>01070 <span class="keywordflow">while</span>(1==1) {
997
<a name="l01071"></a>01071 pos-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>=position.node;
993
<a name="l01071"></a>01071 pos-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>=position.node;
998
994
<a name="l01072"></a>01072 <span class="keywordflow">if</span>(pos==last) <span class="keywordflow">break</span>;
999
<a name="l01073"></a>01073 pos=pos-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
995
<a name="l01073"></a>01073 pos=pos-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
1000
996
<a name="l01074"></a>01074 }
1001
997
<a name="l01075"></a>01075
1002
998
<a name="l01076"></a>01076 <span class="keywordflow">return</span> first;
1003
999
<a name="l01077"></a>01077 }
1004
1000
<a name="l01078"></a>01078
1005
1001
<a name="l01079"></a>01079 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1006
<a name="l01080"></a><a class="code" href="classtree.html#bf241e0eb4ff50eda4f2f5220a86d728">01080</a> <span class="keyword">template</span> <<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#8b127e71944f9bd724c8398f948e9192">tree<T, tree_node_allocator>::reparent</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, iter from)
1002
<a name="l01080"></a><a class="code" href="classtree.html#021a394ff7139df8573e2cb80e6beaa2">01080</a> <span class="keyword">template</span> <<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#32b88523e2d5b6c78381b7da9455be5e" title="Move nodes in range to be children of &#39;position&#39;.">tree<T, tree_node_allocator>::reparent</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, iter from)
1007
1003
<a name="l01081"></a>01081 {
1008
1004
<a name="l01082"></a>01082 <span class="keywordflow">if</span>(from.node->first_child==0) <span class="keywordflow">return</span> position;
1009
<a name="l01083"></a>01083 <span class="keywordflow">return</span> <a class="code" href="classtree.html#8b127e71944f9bd724c8398f948e9192">reparent</a>(position, from.node->first_child, <a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">end</a>(from));
1005
<a name="l01083"></a>01083 <span class="keywordflow">return</span> <a class="code" href="classtree.html#32b88523e2d5b6c78381b7da9455be5e" title="Move nodes in range to be children of &#39;position&#39;.">reparent</a>(position, from.node->first_child, <a class="code" href="classtree.html#0d09fe9fd34fbfc9c9e4e28cb694448e" title="Return iterator to the end of the tree.">end</a>(from));
1010
1006
<a name="l01084"></a>01084 }
1011
1007
<a name="l01085"></a>01085
1012
1008
<a name="l01086"></a>01086 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1013
<a name="l01087"></a><a class="code" href="classtree.html#f4f74176002736b5ad91d07e37954e18">01087</a> <span class="keyword">template</span> <<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#f4f74176002736b5ad91d07e37954e18">tree<T, tree_node_allocator>::move_after</a>(iter target, iter source)
1009
<a name="l01087"></a><a class="code" href="classtree.html#e7f72ba46cd061f71720c731b4a9bf63">01087</a> <span class="keyword">template</span> <<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#e7f72ba46cd061f71720c731b4a9bf63" title="Move &#39;source&#39; node (plus its children) to become the next sibling of &#39;target&#39;...">tree<T, tree_node_allocator>::move_after</a>(iter target, iter source)
1014
1010
<a name="l01088"></a>01088 {
1015
<a name="l01089"></a>01089 <a class="code" href="classtree__node__.html">tree_node</a> *dst=target.node;
1016
<a name="l01090"></a>01090 <a class="code" href="classtree__node__.html">tree_node</a> *src=source.node;
1011
<a name="l01089"></a>01089 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *dst=target.node;
1012
<a name="l01090"></a>01090 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *src=source.node;
1017
1013
<a name="l01091"></a>01091 assert(dst);
1018
1014
<a name="l01092"></a>01092 assert(src);
1019
1015
<a name="l01093"></a>01093
1020
1016
<a name="l01094"></a>01094 <span class="keywordflow">if</span>(dst==src) <span class="keywordflow">return</span> source;
1021
1017
<a name="l01095"></a>01095
1022
1018
<a name="l01096"></a>01096 <span class="comment">// take src out of the tree</span>
1023
<a name="l01097"></a>01097 <span class="keywordflow">if</span>(src-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>!=0) src-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>->next_sibling=src-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
1024
<a name="l01098"></a>01098 <span class="keywordflow">else</span> src-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>->first_child=src-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
1025
<a name="l01099"></a>01099 <span class="keywordflow">if</span>(src-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>!=0) src-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>->prev_sibling=src-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
1026
<a name="l01100"></a>01100 <span class="keywordflow">else</span> src-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>->last_child=src-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
1019
<a name="l01097"></a>01097 <span class="keywordflow">if</span>(src-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>!=0) src-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>->next_sibling=src-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
1020
<a name="l01098"></a>01098 <span class="keywordflow">else</span> src-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>->first_child=src-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
1021
<a name="l01099"></a>01099 <span class="keywordflow">if</span>(src-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>!=0) src-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>->prev_sibling=src-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
1022
<a name="l01100"></a>01100 <span class="keywordflow">else</span> src-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>->last_child=src-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
1027
1023
<a name="l01101"></a>01101
1028
1024
<a name="l01102"></a>01102 <span class="comment">// connect it to the new point</span>
1029
<a name="l01103"></a>01103 <span class="keywordflow">if</span>(dst-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>!=0) dst-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>->prev_sibling=src;
1030
<a name="l01104"></a>01104 <span class="keywordflow">else</span> dst-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>->last_child=src;
1031
<a name="l01105"></a>01105 src-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=dst-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
1032
<a name="l01106"></a>01106 dst-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=src;
1033
<a name="l01107"></a>01107 src-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=dst;
1034
<a name="l01108"></a>01108 src-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>=dst-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>;
1025
<a name="l01103"></a>01103 <span class="keywordflow">if</span>(dst-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>!=0) dst-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>->prev_sibling=src;
1026
<a name="l01104"></a>01104 <span class="keywordflow">else</span> dst-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>->last_child=src;
1027
<a name="l01105"></a>01105 src-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=dst-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
1028
<a name="l01106"></a>01106 dst-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=src;
1029
<a name="l01107"></a>01107 src-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=dst;
1030
<a name="l01108"></a>01108 src-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>=dst-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>;
1035
1031
<a name="l01109"></a>01109 <span class="keywordflow">return</span> src;
1036
1032
<a name="l01110"></a>01110 }
1037
1033
<a name="l01111"></a>01111
1038
1034
<a name="l01112"></a>01112
1039
1035
<a name="l01113"></a>01113 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1040
<a name="l01114"></a><a class="code" href="classtree.html#0298006c1f5106ec81657fc1fc9d1cc3">01114</a> <span class="keyword">template</span> <<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#0298006c1f5106ec81657fc1fc9d1cc3">tree<T, tree_node_allocator>::move_before</a>(iter target, iter source)
1036
<a name="l01114"></a><a class="code" href="classtree.html#b45aa15042445a81b13873d3ef4a2e86">01114</a> <span class="keyword">template</span> <<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#b45aa15042445a81b13873d3ef4a2e86" title="Move &#39;source&#39; node (plus its children) to become the previous sibling of...">tree<T, tree_node_allocator>::move_before</a>(iter target, iter source)
1041
1037
<a name="l01115"></a>01115 {
1042
<a name="l01116"></a>01116 <a class="code" href="classtree__node__.html">tree_node</a> *dst=target.node;
1043
<a name="l01117"></a>01117 <a class="code" href="classtree__node__.html">tree_node</a> *src=source.node;
1038
<a name="l01116"></a>01116 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *dst=target.node;
1039
<a name="l01117"></a>01117 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *src=source.node;
1044
1040
<a name="l01118"></a>01118 assert(dst);
1045
1041
<a name="l01119"></a>01119 assert(src);
1046
1042
<a name="l01120"></a>01120
1047
1043
<a name="l01121"></a>01121 <span class="keywordflow">if</span>(dst==src) <span class="keywordflow">return</span> source;
1048
1044
<a name="l01122"></a>01122
1049
1045
<a name="l01123"></a>01123 <span class="comment">// take src out of the tree</span>
1050
<a name="l01124"></a>01124 <span class="keywordflow">if</span>(src-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>!=0) src-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>->next_sibling=src-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
1051
<a name="l01125"></a>01125 <span class="keywordflow">else</span> src-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>->first_child=src-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
1052
<a name="l01126"></a>01126 <span class="keywordflow">if</span>(src-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>!=0) src-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>->prev_sibling=src-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
1053
<a name="l01127"></a>01127 <span class="keywordflow">else</span> src-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>->last_child=src-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
1046
<a name="l01124"></a>01124 <span class="keywordflow">if</span>(src-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>!=0) src-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>->next_sibling=src-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
1047
<a name="l01125"></a>01125 <span class="keywordflow">else</span> src-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>->first_child=src-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
1048
<a name="l01126"></a>01126 <span class="keywordflow">if</span>(src-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>!=0) src-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>->prev_sibling=src-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
1049
<a name="l01127"></a>01127 <span class="keywordflow">else</span> src-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>->last_child=src-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
1054
1050
<a name="l01128"></a>01128
1055
1051
<a name="l01129"></a>01129 <span class="comment">// connect it to the new point</span>
1056
<a name="l01130"></a>01130 <span class="keywordflow">if</span>(dst-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>!=0) dst-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>->next_sibling=src;
1057
<a name="l01131"></a>01131 <span class="keywordflow">else</span> dst-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>->first_child=src;
1058
<a name="l01132"></a>01132 src-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=dst-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
1059
<a name="l01133"></a>01133 dst-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=src;
1060
<a name="l01134"></a>01134 src-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=dst;
1061
<a name="l01135"></a>01135 src-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>=dst-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>;
1052
<a name="l01130"></a>01130 <span class="keywordflow">if</span>(dst-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>!=0) dst-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>->next_sibling=src;
1053
<a name="l01131"></a>01131 <span class="keywordflow">else</span> dst-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>->first_child=src;
1054
<a name="l01132"></a>01132 src-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=dst-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
1055
<a name="l01133"></a>01133 dst-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=src;
1056
<a name="l01134"></a>01134 src-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=dst;
1057
<a name="l01135"></a>01135 src-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>=dst-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>;
1062
1058
<a name="l01136"></a>01136 <span class="keywordflow">return</span> src;
1063
1059
<a name="l01137"></a>01137 }
1064
1060
<a name="l01138"></a>01138
1065
1061
<a name="l01139"></a>01139 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1066
<a name="l01140"></a><a class="code" href="classtree.html#8c1f99b308550e6eaa1e3ff7932dd7c3">01140</a> <span class="keyword">template</span> <<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#8c1f99b308550e6eaa1e3ff7932dd7c3">tree<T, tree_node_allocator>::move_ontop</a>(iter target, iter source)
1062
<a name="l01140"></a><a class="code" href="classtree.html#a4f8b906b2758eec530e28387b819284">01140</a> <span class="keyword">template</span> <<span class="keyword">typename</span> iter> iter <a class="code" href="classtree.html#a4f8b906b2758eec530e28387b819284" title="Move &#39;source&#39; node (plus its children) to become the node at &#39;target&#39;...">tree<T, tree_node_allocator>::move_ontop</a>(iter target, iter source)
1067
1063
<a name="l01141"></a>01141 {
1068
<a name="l01142"></a>01142 <a class="code" href="classtree__node__.html">tree_node</a> *dst=target.node;
1069
<a name="l01143"></a>01143 <a class="code" href="classtree__node__.html">tree_node</a> *src=source.node;
1064
<a name="l01142"></a>01142 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *dst=target.node;
1065
<a name="l01143"></a>01143 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *src=source.node;
1070
1066
<a name="l01144"></a>01144 assert(dst);
1071
1067
<a name="l01145"></a>01145 assert(src);
1072
1068
<a name="l01146"></a>01146
1073
1069
<a name="l01147"></a>01147 <span class="keywordflow">if</span>(dst==src) <span class="keywordflow">return</span> source;
1074
1070
<a name="l01148"></a>01148
1075
1071
<a name="l01149"></a>01149 <span class="comment">// remember connection points</span>
1076
<a name="l01150"></a>01150 <a class="code" href="classtree__node__.html">tree_node</a> *b_prev_sibling=dst-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
1077
<a name="l01151"></a>01151 <a class="code" href="classtree__node__.html">tree_node</a> *b_next_sibling=dst-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
1078
<a name="l01152"></a>01152 <a class="code" href="classtree__node__.html">tree_node</a> *b_parent=dst-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>;
1072
<a name="l01150"></a>01150 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *b_prev_sibling=dst-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
1073
<a name="l01151"></a>01151 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *b_next_sibling=dst-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
1074
<a name="l01152"></a>01152 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *b_parent=dst-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>;
1079
1075
<a name="l01153"></a>01153
1080
1076
<a name="l01154"></a>01154 <span class="comment">// remove target</span>
1081
<a name="l01155"></a>01155 <a class="code" href="classtree.html#fb19caa16588297c9674abb18c40a32a">erase</a>(target);
1077
<a name="l01155"></a>01155 <a class="code" href="classtree.html#3eb424c89446ae17a747d2aca2cdda4b" title="Erase element at position pointed to by iterator, return incremented iterator.">erase</a>(target);
1082
1078
<a name="l01156"></a>01156
1083
1079
<a name="l01157"></a>01157 <span class="comment">// take src out of the tree</span>
1084
<a name="l01158"></a>01158 <span class="keywordflow">if</span>(src-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>!=0) src-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>->next_sibling=src-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
1085
<a name="l01159"></a>01159 <span class="keywordflow">else</span> src-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>->first_child=src-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
1086
<a name="l01160"></a>01160 <span class="keywordflow">if</span>(src-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>!=0) src-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>->prev_sibling=src-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
1087
<a name="l01161"></a>01161 <span class="keywordflow">else</span> src-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>->last_child=src-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
1080
<a name="l01158"></a>01158 <span class="keywordflow">if</span>(src-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>!=0) src-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>->next_sibling=src-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
1081
<a name="l01159"></a>01159 <span class="keywordflow">else</span> src-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>->first_child=src-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
1082
<a name="l01160"></a>01160 <span class="keywordflow">if</span>(src-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>!=0) src-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>->prev_sibling=src-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
1083
<a name="l01161"></a>01161 <span class="keywordflow">else</span> src-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>->last_child=src-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
1088
1084
<a name="l01162"></a>01162
1089
1085
<a name="l01163"></a>01163 <span class="comment">// connect it to the new point</span>
1090
<a name="l01164"></a>01164 <span class="keywordflow">if</span>(b_prev_sibling!=0) b_prev_sibling-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=src;
1091
<a name="l01165"></a>01165 <span class="keywordflow">else</span> b_parent-><a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>=src;
1092
<a name="l01166"></a>01166 <span class="keywordflow">if</span>(b_next_sibling!=0) b_next_sibling-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=src;
1093
<a name="l01167"></a>01167 <span class="keywordflow">else</span> b_parent-><a class="code" href="classtree__node__.html#f8b222dacdcdf6ca9f24f7a410e36f20">last_child</a>=src;
1094
<a name="l01168"></a>01168 src-><a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=b_prev_sibling;
1095
<a name="l01169"></a>01169 src-><a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=b_next_sibling;
1096
<a name="l01170"></a>01170 src-><a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>=b_parent;
1086
<a name="l01164"></a>01164 <span class="keywordflow">if</span>(b_prev_sibling!=0) b_prev_sibling-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=src;
1087
<a name="l01165"></a>01165 <span class="keywordflow">else</span> b_parent-><a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>=src;
1088
<a name="l01166"></a>01166 <span class="keywordflow">if</span>(b_next_sibling!=0) b_next_sibling-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=src;
1089
<a name="l01167"></a>01167 <span class="keywordflow">else</span> b_parent-><a class="code" href="classtree__node__.html#611d3c41c716dae6bf2012e3d9152933">last_child</a>=src;
1090
<a name="l01168"></a>01168 src-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=b_prev_sibling;
1091
<a name="l01169"></a>01169 src-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=b_next_sibling;
1092
<a name="l01170"></a>01170 src-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>=b_parent;
1097
1093
<a name="l01171"></a>01171 <span class="keywordflow">return</span> src;
1098
1094
<a name="l01172"></a>01172 }
1099
1095
<a name="l01173"></a>01173
1100
1096
<a name="l01174"></a>01174 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1101
<a name="l01175"></a><a class="code" href="classtree.html#66539d831037c85092fe6e3c309c6222">01175</a> <span class="keywordtype">void</span> <a class="code" href="classtree.html#66539d831037c85092fe6e3c309c6222">tree<T, tree_node_allocator>::merge</a>(<a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> to1, <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> to2,
1102
<a name="l01176"></a>01176 <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> from1, <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> from2,
1097
<a name="l01175"></a><a class="code" href="classtree.html#1e3cd901f8f8d8a3da0e1d32e9282db1">01175</a> <span class="keywordtype">void</span> <a class="code" href="classtree.html#1e3cd901f8f8d8a3da0e1d32e9282db1" title="Merge with other tree, creating new branches and leaves only if they are not already...">tree<T, tree_node_allocator>::merge</a>(<a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> to1, <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> to2,
1098
<a name="l01176"></a>01176 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> from1, <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> from2,
1103
1099
<a name="l01177"></a>01177 <span class="keywordtype">bool</span> duplicate_leaves)
1104
1100
<a name="l01178"></a>01178 {
1105
<a name="l01179"></a>01179 <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> fnd;
1101
<a name="l01179"></a>01179 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> fnd;
1106
1102
<a name="l01180"></a>01180 <span class="keywordflow">while</span>(from1!=from2) {
1107
1103
<a name="l01181"></a>01181 <span class="keywordflow">if</span>((fnd=std::find(to1, to2, (*from1))) != to2) { <span class="comment">// element found</span>
1108
<a name="l01182"></a>01182 <span class="keywordflow">if</span>(from1.begin()==from1.end()) { <span class="comment">// full depth reached</span>
1104
<a name="l01182"></a>01182 <span class="keywordflow">if</span>(from1.<a class="code" href="classtree_1_1iterator__base.html#7fad2f6cc1a6a667b5c71bb16c9b84e5">begin</a>()==from1.<a class="code" href="classtree_1_1iterator__base.html#399dabd62f0659c02bfda59b26bdeefe">end</a>()) { <span class="comment">// full depth reached</span>
1109
1105
<a name="l01183"></a>01183 <span class="keywordflow">if</span>(duplicate_leaves)
1110
<a name="l01184"></a>01184 <a class="code" href="classtree.html#61f096e7fbd483ff1fc1b56fe25ffcf3">append_child</a>(<a class="code" href="classtree.html#a00c1035eb3750d402f0830196264e7f">parent</a>(to1), (*from1));
1106
<a name="l01184"></a>01184 <a class="code" href="classtree.html#8d68e95f5088d48cb54fd6ae381729f0" title="Insert empty node as last child of node pointed to by position.">append_child</a>(<a class="code" href="classtree.html#aaaa1622d2d58ecda846640bd8f8bd28" title="Return iterator to the parent of a node.">parent</a>(to1), (*from1));
1111
1107
<a name="l01185"></a>01185 }
1112
1108
<a name="l01186"></a>01186 <span class="keywordflow">else</span> { <span class="comment">// descend further</span>
1113
<a name="l01187"></a>01187 <a class="code" href="classtree.html#66539d831037c85092fe6e3c309c6222">merge</a>(fnd.begin(), fnd.end(), from1.begin(), from1.end(), duplicate_leaves);
1109
<a name="l01187"></a>01187 <a class="code" href="classtree.html#1e3cd901f8f8d8a3da0e1d32e9282db1" title="Merge with other tree, creating new branches and leaves only if they are not already...">merge</a>(fnd.<a class="code" href="classtree_1_1iterator__base.html#7fad2f6cc1a6a667b5c71bb16c9b84e5">begin</a>(), fnd.<a class="code" href="classtree_1_1iterator__base.html#399dabd62f0659c02bfda59b26bdeefe">end</a>(), from1.<a class="code" href="classtree_1_1iterator__base.html#7fad2f6cc1a6a667b5c71bb16c9b84e5">begin</a>(), from1.<a class="code" href="classtree_1_1iterator__base.html#399dabd62f0659c02bfda59b26bdeefe">end</a>(), duplicate_leaves);
1114
1110
<a name="l01188"></a>01188 }
1115
1111
<a name="l01189"></a>01189 }
1116
1112
<a name="l01190"></a>01190 <span class="keywordflow">else</span> { <span class="comment">// element missing</span>
1117
<a name="l01191"></a>01191 <a class="code" href="classtree.html#6c41a7abd2827c9193f03ea0a51e8e30">insert_subtree</a>(to2, from1);
1113
<a name="l01191"></a>01191 <a class="code" href="classtree.html#d66d55d58b48ce0a8d7a5b41abe923d5" title="Insert node (with children) pointed to by subtree as previous sibling of node pointed...">insert_subtree</a>(to2, from1);
1118
1114
<a name="l01192"></a>01192 }
1119
1115
<a name="l01193"></a>01193 ++from1;
1120
1116
<a name="l01194"></a>01194 }
1404
1400
<a name="l01478"></a>01478 <span class="comment">// Iterator base</span>
1405
1401
<a name="l01479"></a>01479
1406
1402
<a name="l01480"></a>01480 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1407
<a name="l01481"></a>01481 <a class="code" href="classtree.html">tree<T, tree_node_allocator>::iterator_base::iterator_base</a>()
1408
<a name="l01482"></a>01482 : node(0), skip_current_children_(<a class="code" href="inc_2libofx_8h.html#924dded66e355a2c955251063df9e97e">false</a>)
1403
<a name="l01481"></a><a class="code" href="classtree_1_1iterator__base.html#1be2e6802acca5f281ddc7e5d67bd61c">01481</a> <a class="code" href="classtree_1_1iterator__base.html#1be2e6802acca5f281ddc7e5d67bd61c">tree<T, tree_node_allocator>::iterator_base::iterator_base</a>()
1404
<a name="l01482"></a>01482 : node(0), skip_current_children_(<a class="code" href="inc_2libofx_8h.html#65e9886d74aaee76545e83dd09011727">false</a>)
1409
1405
<a name="l01483"></a>01483 {
1410
1406
<a name="l01484"></a>01484 }
1411
1407
<a name="l01485"></a>01485
1412
1408
<a name="l01486"></a>01486 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1413
<a name="l01487"></a>01487 <a class="code" href="classtree.html">tree<T, tree_node_allocator>::iterator_base::iterator_base</a>(tree_node *tn)
1414
<a name="l01488"></a>01488 : node(tn), skip_current_children_(<a class="code" href="inc_2libofx_8h.html#924dded66e355a2c955251063df9e97e">false</a>)
1409
<a name="l01487"></a><a class="code" href="classtree_1_1iterator__base.html#dd6dda19c2febebabbc5e769365dc4dd">01487</a> <a class="code" href="classtree_1_1iterator__base.html#1be2e6802acca5f281ddc7e5d67bd61c">tree<T, tree_node_allocator>::iterator_base::iterator_base</a>(<a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *tn)
1410
<a name="l01488"></a>01488 : <a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>(tn), <a class="code" href="classtree_1_1iterator__base.html#88239267268c728952e0cd89b9326e82">skip_current_children_</a>(<a class="code" href="inc_2libofx_8h.html#65e9886d74aaee76545e83dd09011727">false</a>)
1415
1411
<a name="l01489"></a>01489 {
1416
1412
<a name="l01490"></a>01490 }
1417
1413
<a name="l01491"></a>01491
1418
1414
<a name="l01492"></a>01492 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1419
<a name="l01493"></a>01493 T& <a class="code" href="classtree.html">tree<T, tree_node_allocator>::iterator_base::operator*</a>()<span class="keyword"> const</span>
1415
<a name="l01493"></a><a class="code" href="classtree_1_1iterator__base.html#ada7cbe4d4f9a5ec29db78d10712edc6">01493</a> T& <a class="code" href="classtree_1_1iterator__base.html#ada7cbe4d4f9a5ec29db78d10712edc6">tree<T, tree_node_allocator>::iterator_base::operator*</a>()<span class="keyword"> const</span>
1420
1416
<a name="l01494"></a>01494 <span class="keyword"> </span>{
1421
<a name="l01495"></a>01495 <span class="keywordflow">return</span> node->data;
1417
<a name="l01495"></a>01495 <span class="keywordflow">return</span> <a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-><a class="code" href="classtree__node__.html#4c15077a3ad0552413d1268ee4be1bef">data</a>;
1422
1418
<a name="l01496"></a>01496 }
1423
1419
<a name="l01497"></a>01497
1424
1420
<a name="l01498"></a>01498 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1425
<a name="l01499"></a>01499 T* <a class="code" href="classtree.html">tree<T, tree_node_allocator>::iterator_base::operator-></a>()<span class="keyword"> const</span>
1421
<a name="l01499"></a><a class="code" href="classtree_1_1iterator__base.html#bd9c59569df7d8be5a50c835c180f4dc">01499</a> T* <a class="code" href="classtree_1_1iterator__base.html#bd9c59569df7d8be5a50c835c180f4dc">tree<T, tree_node_allocator>::iterator_base::operator-></a>()<span class="keyword"> const</span>
1426
1422
<a name="l01500"></a>01500 <span class="keyword"> </span>{
1427
<a name="l01501"></a>01501 <span class="keywordflow">return</span> &(node->data);
1423
<a name="l01501"></a>01501 <span class="keywordflow">return</span> &(<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-><a class="code" href="classtree__node__.html#4c15077a3ad0552413d1268ee4be1bef">data</a>);
1428
1424
<a name="l01502"></a>01502 }
1429
1425
<a name="l01503"></a>01503
1430
1426
<a name="l01504"></a>01504 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1431
<a name="l01505"></a>01505 <span class="keywordtype">bool</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator::operator!=</a>(<span class="keyword">const</span> post_order_iterator& other)<span class="keyword"> const</span>
1427
<a name="l01505"></a><a class="code" href="classtree_1_1post__order__iterator.html#59f0d0d145f27ed094a69214e1831102">01505</a> <span class="keywordtype">bool</span> <a class="code" href="classtree_1_1post__order__iterator.html#59f0d0d145f27ed094a69214e1831102">tree<T, tree_node_allocator>::post_order_iterator::operator!=</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1post__order__iterator.html" title="Depth-first iterator, first accessing the children, then the node itself.">post_order_iterator</a>& other)<span class="keyword"> const</span>
1432
1428
<a name="l01506"></a>01506 <span class="keyword"> </span>{
1433
<a name="l01507"></a>01507 <span class="keywordflow">if</span>(other.node!=this->node) <span class="keywordflow">return</span> <span class="keyword">true</span>;
1429
<a name="l01507"></a>01507 <span class="keywordflow">if</span>(other.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>!=this->node) <span class="keywordflow">return</span> <span class="keyword">true</span>;
1434
1430
<a name="l01508"></a>01508 <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;
1435
1431
<a name="l01509"></a>01509 }
1436
1432
<a name="l01510"></a>01510
1437
1433
<a name="l01511"></a>01511 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1438
<a name="l01512"></a>01512 <span class="keywordtype">bool</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator::operator==</a>(<span class="keyword">const</span> post_order_iterator& other)<span class="keyword"> const</span>
1434
<a name="l01512"></a><a class="code" href="classtree_1_1post__order__iterator.html#b1303f191d6bc8a62e5f03fa53466ec4">01512</a> <span class="keywordtype">bool</span> <a class="code" href="classtree_1_1post__order__iterator.html#b1303f191d6bc8a62e5f03fa53466ec4">tree<T, tree_node_allocator>::post_order_iterator::operator==</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1post__order__iterator.html" title="Depth-first iterator, first accessing the children, then the node itself.">post_order_iterator</a>& other)<span class="keyword"> const</span>
1439
1435
<a name="l01513"></a>01513 <span class="keyword"> </span>{
1440
<a name="l01514"></a>01514 <span class="keywordflow">if</span>(other.node==this->node) <span class="keywordflow">return</span> <span class="keyword">true</span>;
1436
<a name="l01514"></a>01514 <span class="keywordflow">if</span>(other.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>==this->node) <span class="keywordflow">return</span> <span class="keyword">true</span>;
1441
1437
<a name="l01515"></a>01515 <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;
1442
1438
<a name="l01516"></a>01516 }
1443
1439
<a name="l01517"></a>01517
1444
1440
<a name="l01518"></a>01518 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1445
<a name="l01519"></a>01519 <span class="keywordtype">bool</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::pre_order_iterator::operator!=</a>(<span class="keyword">const</span> pre_order_iterator& other)<span class="keyword"> const</span>
1441
<a name="l01519"></a><a class="code" href="classtree_1_1pre__order__iterator.html#14425c7743e9a6da2d96b172a85d2bed">01519</a> <span class="keywordtype">bool</span> <a class="code" href="classtree_1_1pre__order__iterator.html#14425c7743e9a6da2d96b172a85d2bed">tree<T, tree_node_allocator>::pre_order_iterator::operator!=</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1pre__order__iterator.html" title="Depth-first iterator, first accessing the node, then its children.">pre_order_iterator</a>& other)<span class="keyword"> const</span>
1446
1442
<a name="l01520"></a>01520 <span class="keyword"> </span>{
1447
<a name="l01521"></a>01521 <span class="keywordflow">if</span>(other.node!=this->node) <span class="keywordflow">return</span> <span class="keyword">true</span>;
1443
<a name="l01521"></a>01521 <span class="keywordflow">if</span>(other.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>!=this->node) <span class="keywordflow">return</span> <span class="keyword">true</span>;
1448
1444
<a name="l01522"></a>01522 <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;
1449
1445
<a name="l01523"></a>01523 }
1450
1446
<a name="l01524"></a>01524
1451
1447
<a name="l01525"></a>01525 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1452
<a name="l01526"></a>01526 <span class="keywordtype">bool</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::pre_order_iterator::operator==</a>(<span class="keyword">const</span> pre_order_iterator& other)<span class="keyword"> const</span>
1448
<a name="l01526"></a><a class="code" href="classtree_1_1pre__order__iterator.html#ea8dee1bfc2450608b2b35d26a9f11b7">01526</a> <span class="keywordtype">bool</span> <a class="code" href="classtree_1_1pre__order__iterator.html#ea8dee1bfc2450608b2b35d26a9f11b7">tree<T, tree_node_allocator>::pre_order_iterator::operator==</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1pre__order__iterator.html" title="Depth-first iterator, first accessing the node, then its children.">pre_order_iterator</a>& other)<span class="keyword"> const</span>
1453
1449
<a name="l01527"></a>01527 <span class="keyword"> </span>{
1454
<a name="l01528"></a>01528 <span class="keywordflow">if</span>(other.node==this->node) <span class="keywordflow">return</span> <span class="keyword">true</span>;
1450
<a name="l01528"></a>01528 <span class="keywordflow">if</span>(other.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>==this->node) <span class="keywordflow">return</span> <span class="keyword">true</span>;
1455
1451
<a name="l01529"></a>01529 <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;
1456
1452
<a name="l01530"></a>01530 }
1457
1453
<a name="l01531"></a>01531
1458
1454
<a name="l01532"></a>01532 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1459
<a name="l01533"></a>01533 <span class="keywordtype">bool</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator::operator!=</a>(<span class="keyword">const</span> sibling_iterator& other)<span class="keyword"> const</span>
1455
<a name="l01533"></a><a class="code" href="classtree_1_1sibling__iterator.html#2f4b2c5112c9d16f65852bc84d34c9c9">01533</a> <span class="keywordtype">bool</span> <a class="code" href="classtree_1_1sibling__iterator.html#2f4b2c5112c9d16f65852bc84d34c9c9">tree<T, tree_node_allocator>::sibling_iterator::operator!=</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a>& other)<span class="keyword"> const</span>
1460
1456
<a name="l01534"></a>01534 <span class="keyword"> </span>{
1461
<a name="l01535"></a>01535 <span class="keywordflow">if</span>(other.node!=this->node) <span class="keywordflow">return</span> <span class="keyword">true</span>;
1457
<a name="l01535"></a>01535 <span class="keywordflow">if</span>(other.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>!=this->node) <span class="keywordflow">return</span> <span class="keyword">true</span>;
1462
1458
<a name="l01536"></a>01536 <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;
1463
1459
<a name="l01537"></a>01537 }
1464
1460
<a name="l01538"></a>01538
1465
1461
<a name="l01539"></a>01539 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1466
<a name="l01540"></a>01540 <span class="keywordtype">bool</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator::operator==</a>(<span class="keyword">const</span> sibling_iterator& other)<span class="keyword"> const</span>
1462
<a name="l01540"></a><a class="code" href="classtree_1_1sibling__iterator.html#f235d7b64b7d2654437482bab80c797b">01540</a> <span class="keywordtype">bool</span> <a class="code" href="classtree_1_1sibling__iterator.html#f235d7b64b7d2654437482bab80c797b">tree<T, tree_node_allocator>::sibling_iterator::operator==</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a>& other)<span class="keyword"> const</span>
1467
1463
<a name="l01541"></a>01541 <span class="keyword"> </span>{
1468
<a name="l01542"></a>01542 <span class="keywordflow">if</span>(other.node==this->node) <span class="keywordflow">return</span> <span class="keyword">true</span>;
1464
<a name="l01542"></a>01542 <span class="keywordflow">if</span>(other.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>==this->node) <span class="keywordflow">return</span> <span class="keyword">true</span>;
1469
1465
<a name="l01543"></a>01543 <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;
1470
1466
<a name="l01544"></a>01544 }
1471
1467
<a name="l01545"></a>01545
1472
1468
<a name="l01546"></a>01546 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1473
<a name="l01547"></a>01547 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator</a> <a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">tree<T, tree_node_allocator>::iterator_base::begin</a>()<span class="keyword"> const</span>
1469
<a name="l01547"></a><a class="code" href="classtree_1_1iterator__base.html#7fad2f6cc1a6a667b5c71bb16c9b84e5">01547</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator</a> <a class="code" href="classtree_1_1iterator__base.html#7fad2f6cc1a6a667b5c71bb16c9b84e5">tree<T, tree_node_allocator>::iterator_base::begin</a>()<span class="keyword"> const</span>
1474
1470
<a name="l01548"></a>01548 <span class="keyword"> </span>{
1475
<a name="l01549"></a>01549 sibling_iterator ret(node->first_child);
1476
<a name="l01550"></a>01550 ret.parent_=this->node;
1471
<a name="l01549"></a>01549 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> ret(<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-><a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>);
1472
<a name="l01550"></a>01550 ret.<a class="code" href="classtree_1_1sibling__iterator.html#204f7449ee908f982d21cc3d334d25bc">parent_</a>=this-><a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>;
1477
1473
<a name="l01551"></a>01551 <span class="keywordflow">return</span> ret;
1478
1474
<a name="l01552"></a>01552 }
1479
1475
<a name="l01553"></a>01553
1480
1476
<a name="l01554"></a>01554 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1481
<a name="l01555"></a>01555 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator</a> <a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">tree<T, tree_node_allocator>::iterator_base::end</a>()<span class="keyword"> const</span>
1477
<a name="l01555"></a><a class="code" href="classtree_1_1iterator__base.html#399dabd62f0659c02bfda59b26bdeefe">01555</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator</a> <a class="code" href="classtree_1_1iterator__base.html#399dabd62f0659c02bfda59b26bdeefe">tree<T, tree_node_allocator>::iterator_base::end</a>()<span class="keyword"> const</span>
1482
1478
<a name="l01556"></a>01556 <span class="keyword"> </span>{
1483
<a name="l01557"></a>01557 sibling_iterator ret(0);
1484
<a name="l01558"></a>01558 ret.parent_=node;
1479
<a name="l01557"></a>01557 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> ret(0);
1480
<a name="l01558"></a>01558 ret.<a class="code" href="classtree_1_1sibling__iterator.html#204f7449ee908f982d21cc3d334d25bc">parent_</a>=<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>;
1485
1481
<a name="l01559"></a>01559 <span class="keywordflow">return</span> ret;
1486
1482
<a name="l01560"></a>01560 }
1487
1483
<a name="l01561"></a>01561
1488
1484
<a name="l01562"></a>01562 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1489
<a name="l01563"></a>01563 <span class="keywordtype">void</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::iterator_base::skip_children</a>()
1485
<a name="l01563"></a><a class="code" href="classtree_1_1iterator__base.html#a0be7989b9dd4c5bcdcc0d47a56d11fb">01563</a> <span class="keywordtype">void</span> <a class="code" href="classtree_1_1iterator__base.html#a0be7989b9dd4c5bcdcc0d47a56d11fb" title="When called, the next increment/decrement skips children of this node.">tree<T, tree_node_allocator>::iterator_base::skip_children</a>()
1490
1486
<a name="l01564"></a>01564 {
1491
<a name="l01565"></a>01565 skip_current_children_=<span class="keyword">true</span>;
1487
<a name="l01565"></a>01565 <a class="code" href="classtree_1_1iterator__base.html#88239267268c728952e0cd89b9326e82">skip_current_children_</a>=<span class="keyword">true</span>;
1492
1488
<a name="l01566"></a>01566 }
1493
1489
<a name="l01567"></a>01567
1494
1490
<a name="l01568"></a>01568 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1495
<a name="l01569"></a>01569 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classtree.html#9e33e1e03c74f7fd67d0c8ab1b014f70">tree<T, tree_node_allocator>::iterator_base::number_of_children</a>()<span class="keyword"> const</span>
1491
<a name="l01569"></a><a class="code" href="classtree_1_1iterator__base.html#435004214270928d106dd4c8f6a36f17">01569</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classtree_1_1iterator__base.html#435004214270928d106dd4c8f6a36f17" title="Number of children of the node pointed to by the iterator.">tree<T, tree_node_allocator>::iterator_base::number_of_children</a>()<span class="keyword"> const</span>
1496
1492
<a name="l01570"></a>01570 <span class="keyword"> </span>{
1497
<a name="l01571"></a>01571 <a class="code" href="classtree.html#ce325844a601660acbe7687991f8a225">tree_node</a> *pos=node->first_child;
1493
<a name="l01571"></a>01571 <a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *pos=<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-><a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>;
1498
1494
<a name="l01572"></a>01572 <span class="keywordflow">if</span>(pos==0) <span class="keywordflow">return</span> 0;
1499
1495
<a name="l01573"></a>01573
1500
1496
<a name="l01574"></a>01574 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ret=1;
1501
<a name="l01575"></a>01575 <span class="keywordflow">while</span>(pos!=node->last_child) {
1497
<a name="l01575"></a>01575 <span class="keywordflow">while</span>(pos!=<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-><a class="code" href="classtree__node__.html#611d3c41c716dae6bf2012e3d9152933">last_child</a>) {
1502
1498
<a name="l01576"></a>01576 ++ret;
1503
<a name="l01577"></a>01577 pos=pos->next_sibling;
1499
<a name="l01577"></a>01577 pos=pos-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
1504
1500
<a name="l01578"></a>01578 }
1505
1501
<a name="l01579"></a>01579 <span class="keywordflow">return</span> ret;
1506
1502
<a name="l01580"></a>01580 }
1618
1614
<a name="l01692"></a>01692 <span class="comment">// Post-order iterator</span>
1619
1615
<a name="l01693"></a>01693
1620
1616
<a name="l01694"></a>01694 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1621
<a name="l01695"></a>01695 <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator::post_order_iterator</a>()
1622
<a name="l01696"></a>01696 : iterator_base(0)
1617
<a name="l01695"></a><a class="code" href="classtree_1_1post__order__iterator.html#f6d2a1ff77da1ca318447faef819fb22">01695</a> <a class="code" href="classtree_1_1post__order__iterator.html#f6d2a1ff77da1ca318447faef819fb22">tree<T, tree_node_allocator>::post_order_iterator::post_order_iterator</a>()
1618
<a name="l01696"></a>01696 : <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>(0)
1623
1619
<a name="l01697"></a>01697 {
1624
1620
<a name="l01698"></a>01698 }
1625
1621
<a name="l01699"></a>01699
1626
1622
<a name="l01700"></a>01700 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1627
<a name="l01701"></a>01701 <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator::post_order_iterator</a>(tree_node *tn)
1628
<a name="l01702"></a>01702 : iterator_base(tn)
1623
<a name="l01701"></a><a class="code" href="classtree_1_1post__order__iterator.html#add3e555f6a69c1799cb5b9b12e3ef48">01701</a> <a class="code" href="classtree_1_1post__order__iterator.html#f6d2a1ff77da1ca318447faef819fb22">tree<T, tree_node_allocator>::post_order_iterator::post_order_iterator</a>(<a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *tn)
1624
<a name="l01702"></a>01702 : <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>(tn)
1629
1625
<a name="l01703"></a>01703 {
1630
1626
<a name="l01704"></a>01704 }
1631
1627
<a name="l01705"></a>01705
1632
1628
<a name="l01706"></a>01706 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1633
<a name="l01707"></a>01707 <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator::post_order_iterator</a>(<span class="keyword">const</span> iterator_base &other)
1634
<a name="l01708"></a>01708 : iterator_base(other.node)
1629
<a name="l01707"></a><a class="code" href="classtree_1_1post__order__iterator.html#bbe898c229fab7e833da744a76aca5ab">01707</a> <a class="code" href="classtree_1_1post__order__iterator.html#f6d2a1ff77da1ca318447faef819fb22">tree<T, tree_node_allocator>::post_order_iterator::post_order_iterator</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a> &other)
1630
<a name="l01708"></a>01708 : <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>(other.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>)
1635
1631
<a name="l01709"></a>01709 {
1636
1632
<a name="l01710"></a>01710 }
1637
1633
<a name="l01711"></a>01711
1638
1634
<a name="l01712"></a>01712 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1639
<a name="l01713"></a>01713 <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator::post_order_iterator</a>(<span class="keyword">const</span> sibling_iterator& other)
1640
<a name="l01714"></a>01714 : iterator_base(other.node)
1635
<a name="l01713"></a><a class="code" href="classtree_1_1post__order__iterator.html#d1bba922181132f5c41a6ebd5230abe9">01713</a> <a class="code" href="classtree_1_1post__order__iterator.html#f6d2a1ff77da1ca318447faef819fb22">tree<T, tree_node_allocator>::post_order_iterator::post_order_iterator</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a>& other)
1636
<a name="l01714"></a>01714 : <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>(other.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>)
1641
1637
<a name="l01715"></a>01715 {
1642
1638
<a name="l01716"></a>01716 <span class="keywordflow">if</span>(this->node==0) {
1643
<a name="l01717"></a>01717 <span class="keywordflow">if</span>(other.range_last()!=0)
1644
<a name="l01718"></a>01718 this->node=other.range_last();
1639
<a name="l01717"></a>01717 <span class="keywordflow">if</span>(other.<a class="code" href="classtree_1_1sibling__iterator.html#85438655c23ba60d2a4f83787e3dcf48">range_last</a>()!=0)
1640
<a name="l01718"></a>01718 this->node=other.<a class="code" href="classtree_1_1sibling__iterator.html#85438655c23ba60d2a4f83787e3dcf48">range_last</a>();
1645
1641
<a name="l01719"></a>01719 <span class="keywordflow">else</span>
1646
<a name="l01720"></a>01720 this->node=other.parent_;
1647
<a name="l01721"></a>01721 this->skip_children();
1642
<a name="l01720"></a>01720 this-><a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=other.<a class="code" href="classtree_1_1sibling__iterator.html#204f7449ee908f982d21cc3d334d25bc">parent_</a>;
1643
<a name="l01721"></a>01721 this-><a class="code" href="classtree_1_1iterator__base.html#a0be7989b9dd4c5bcdcc0d47a56d11fb" title="When called, the next increment/decrement skips children of this node.">skip_children</a>();
1648
1644
<a name="l01722"></a>01722 ++(*this);
1649
1645
<a name="l01723"></a>01723 }
1650
1646
<a name="l01724"></a>01724 }
1651
1647
<a name="l01725"></a>01725
1652
1648
<a name="l01726"></a>01726 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1653
<a name="l01727"></a>01727 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator</a>& <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator::operator++</a>()
1649
<a name="l01727"></a><a class="code" href="classtree_1_1post__order__iterator.html#baba42c4ecb0a0bb8b21b0c28dfa3009">01727</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator</a>& <a class="code" href="classtree_1_1post__order__iterator.html#baba42c4ecb0a0bb8b21b0c28dfa3009">tree<T, tree_node_allocator>::post_order_iterator::operator++</a>()
1654
1650
<a name="l01728"></a>01728 {
1655
1651
<a name="l01729"></a>01729 assert(this->node!=0);
1656
1652
<a name="l01730"></a>01730 <span class="keywordflow">if</span>(this->node->next_sibling==0) {
1657
<a name="l01731"></a>01731 this->node=this->node->parent;
1658
<a name="l01732"></a>01732 this->skip_current_children_=<span class="keyword">false</span>;
1653
<a name="l01731"></a>01731 this-><a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-><a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>;
1654
<a name="l01732"></a>01732 this-><a class="code" href="classtree_1_1iterator__base.html#88239267268c728952e0cd89b9326e82">skip_current_children_</a>=<span class="keyword">false</span>;
1659
1655
<a name="l01733"></a>01733 }
1660
1656
<a name="l01734"></a>01734 <span class="keywordflow">else</span> {
1661
<a name="l01735"></a>01735 this->node=this->node->next_sibling;
1657
<a name="l01735"></a>01735 this-><a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-><a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
1662
1658
<a name="l01736"></a>01736 <span class="keywordflow">if</span>(this->skip_current_children_) {
1663
<a name="l01737"></a>01737 this->skip_current_children_=<span class="keyword">false</span>;
1659
<a name="l01737"></a>01737 this-><a class="code" href="classtree_1_1iterator__base.html#88239267268c728952e0cd89b9326e82">skip_current_children_</a>=<span class="keyword">false</span>;
1664
1660
<a name="l01738"></a>01738 }
1665
1661
<a name="l01739"></a>01739 <span class="keywordflow">else</span> {
1666
1662
<a name="l01740"></a>01740 <span class="keywordflow">while</span>(this->node->first_child)
1667
<a name="l01741"></a>01741 this->node=this->node->first_child;
1663
<a name="l01741"></a>01741 this-><a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-><a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-><a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>;
1668
1664
<a name="l01742"></a>01742 }
1669
1665
<a name="l01743"></a>01743 }
1670
1666
<a name="l01744"></a>01744 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1671
1667
<a name="l01745"></a>01745 }
1672
1668
<a name="l01746"></a>01746
1673
1669
<a name="l01747"></a>01747 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1674
<a name="l01748"></a>01748 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator</a>& <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator::operator--</a>()
1670
<a name="l01748"></a><a class="code" href="classtree_1_1post__order__iterator.html#f70bbd10b24ca0cf1c674e4ef40899db">01748</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator</a>& <a class="code" href="classtree_1_1post__order__iterator.html#f70bbd10b24ca0cf1c674e4ef40899db">tree<T, tree_node_allocator>::post_order_iterator::operator--</a>()
1675
1671
<a name="l01749"></a>01749 {
1676
1672
<a name="l01750"></a>01750 assert(this->node!=0);
1677
1673
<a name="l01751"></a>01751 <span class="keywordflow">if</span>(this->skip_current_children_ || this->node->last_child==0) {
1678
<a name="l01752"></a>01752 this->skip_current_children_=<span class="keyword">false</span>;
1674
<a name="l01752"></a>01752 this-><a class="code" href="classtree_1_1iterator__base.html#88239267268c728952e0cd89b9326e82">skip_current_children_</a>=<span class="keyword">false</span>;
1679
1675
<a name="l01753"></a>01753 <span class="keywordflow">while</span>(this->node->prev_sibling==0)
1680
<a name="l01754"></a>01754 this->node=this->node->parent;
1681
<a name="l01755"></a>01755 this->node=this->node->prev_sibling;
1676
<a name="l01754"></a>01754 this-><a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-><a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>;
1677
<a name="l01755"></a>01755 this-><a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-><a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
1682
1678
<a name="l01756"></a>01756 }
1683
1679
<a name="l01757"></a>01757 <span class="keywordflow">else</span> {
1684
<a name="l01758"></a>01758 this->node=this->node->last_child;
1680
<a name="l01758"></a>01758 this-><a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-><a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-><a class="code" href="classtree__node__.html#611d3c41c716dae6bf2012e3d9152933">last_child</a>;
1685
1681
<a name="l01759"></a>01759 }
1686
1682
<a name="l01760"></a>01760 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1687
1683
<a name="l01761"></a>01761 }
1688
1684
<a name="l01762"></a>01762
1689
1685
<a name="l01763"></a>01763 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1690
<a name="l01764"></a>01764 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator</a> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator::operator++</a>(<span class="keywordtype">int</span>)
1686
<a name="l01764"></a><a class="code" href="classtree_1_1post__order__iterator.html#7041325e846017886e7c43d9c1c2cddb">01764</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator</a> <a class="code" href="classtree_1_1post__order__iterator.html#baba42c4ecb0a0bb8b21b0c28dfa3009">tree<T, tree_node_allocator>::post_order_iterator::operator++</a>(<span class="keywordtype">int</span>)
1691
1687
<a name="l01765"></a>01765 {
1692
<a name="l01766"></a>01766 post_order_iterator copy = *<span class="keyword">this</span>;
1688
<a name="l01766"></a>01766 <a class="code" href="classtree_1_1post__order__iterator.html" title="Depth-first iterator, first accessing the children, then the node itself.">post_order_iterator</a> copy = *<span class="keyword">this</span>;
1693
1689
<a name="l01767"></a>01767 ++(*this);
1694
1690
<a name="l01768"></a>01768 <span class="keywordflow">return</span> copy;
1695
1691
<a name="l01769"></a>01769 }
1696
1692
<a name="l01770"></a>01770
1697
1693
<a name="l01771"></a>01771 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1698
<a name="l01772"></a>01772 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator</a> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator::operator--</a>(<span class="keywordtype">int</span>)
1694
<a name="l01772"></a><a class="code" href="classtree_1_1post__order__iterator.html#f2c0df6c235853aa2191d02a557a1fea">01772</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator</a> <a class="code" href="classtree_1_1post__order__iterator.html#f70bbd10b24ca0cf1c674e4ef40899db">tree<T, tree_node_allocator>::post_order_iterator::operator--</a>(<span class="keywordtype">int</span>)
1699
1695
<a name="l01773"></a>01773 {
1700
<a name="l01774"></a>01774 post_order_iterator copy = *<span class="keyword">this</span>;
1696
<a name="l01774"></a>01774 <a class="code" href="classtree_1_1post__order__iterator.html" title="Depth-first iterator, first accessing the children, then the node itself.">post_order_iterator</a> copy = *<span class="keyword">this</span>;
1701
1697
<a name="l01775"></a>01775 --(*this);
1702
1698
<a name="l01776"></a>01776 <span class="keywordflow">return</span> copy;
1703
1699
<a name="l01777"></a>01777 }
1704
1700
<a name="l01778"></a>01778
1705
1701
<a name="l01779"></a>01779
1706
1702
<a name="l01780"></a>01780 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1707
<a name="l01781"></a>01781 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator</a>& <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator::operator+=</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num)
1703
<a name="l01781"></a><a class="code" href="classtree_1_1post__order__iterator.html#0b6c2246f41b0a2ff8e4c9d9efcee879">01781</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::post_order_iterator</a>& <a class="code" href="classtree_1_1post__order__iterator.html#0b6c2246f41b0a2ff8e4c9d9efcee879">tree<T, tree_node_allocator>::post_order_iterator::operator+=</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num)
1708
1704
<a name="l01782"></a>01782 {
1709
1705
<a name="l01783"></a>01783 <span class="keywordflow">while</span>(num>0) {
1710
1706
<a name="l01784"></a>01784 ++(*this);
1914
1910
<a name="l01988"></a>01988 <span class="comment">// Sibling iterator</span>
1915
1911
<a name="l01989"></a>01989
1916
1912
<a name="l01990"></a>01990 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1917
<a name="l01991"></a>01991 <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator::sibling_iterator</a>()
1918
<a name="l01992"></a>01992 : iterator_base()
1913
<a name="l01991"></a><a class="code" href="classtree_1_1sibling__iterator.html#daaf56c800ed241d36802abab3925a2a">01991</a> <a class="code" href="classtree_1_1sibling__iterator.html#daaf56c800ed241d36802abab3925a2a">tree<T, tree_node_allocator>::sibling_iterator::sibling_iterator</a>()
1914
<a name="l01992"></a>01992 : <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>()
1919
1915
<a name="l01993"></a>01993 {
1920
1916
<a name="l01994"></a>01994 set_parent_();
1921
1917
<a name="l01995"></a>01995 }
1922
1918
<a name="l01996"></a>01996
1923
1919
<a name="l01997"></a>01997 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1924
<a name="l01998"></a>01998 <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator::sibling_iterator</a>(tree_node *tn)
1925
<a name="l01999"></a>01999 : iterator_base(tn)
1920
<a name="l01998"></a><a class="code" href="classtree_1_1sibling__iterator.html#7ddfa2fffd76fdd78b97973408a80528">01998</a> <a class="code" href="classtree_1_1sibling__iterator.html#daaf56c800ed241d36802abab3925a2a">tree<T, tree_node_allocator>::sibling_iterator::sibling_iterator</a>(<a class="code" href="classtree__node__.html" title="A node in the tree, combining links to other nodes as well as the actual data.">tree_node</a> *tn)
1921
<a name="l01999"></a>01999 : <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>(tn)
1926
1922
<a name="l02000"></a>02000 {
1927
1923
<a name="l02001"></a>02001 set_parent_();
1928
1924
<a name="l02002"></a>02002 }
1929
1925
<a name="l02003"></a>02003
1930
1926
<a name="l02004"></a>02004 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1931
<a name="l02005"></a>02005 <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator::sibling_iterator</a>(<span class="keyword">const</span> iterator_base& other)
1932
<a name="l02006"></a>02006 : iterator_base(other.node)
1927
<a name="l02005"></a><a class="code" href="classtree_1_1sibling__iterator.html#093ea4798a85b0d52e5db20a876bc0d3">02005</a> <a class="code" href="classtree_1_1sibling__iterator.html#daaf56c800ed241d36802abab3925a2a">tree<T, tree_node_allocator>::sibling_iterator::sibling_iterator</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>& other)
1928
<a name="l02006"></a>02006 : <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>(other.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>)
1933
1929
<a name="l02007"></a>02007 {
1934
1930
<a name="l02008"></a>02008 set_parent_();
1935
1931
<a name="l02009"></a>02009 }
1936
1932
<a name="l02010"></a>02010
1937
1933
<a name="l02011"></a>02011 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1938
<a name="l02012"></a>02012 <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator::sibling_iterator</a>(<span class="keyword">const</span> sibling_iterator& other)
1939
<a name="l02013"></a>02013 : iterator_base(other), parent_(other.parent_)
1934
<a name="l02012"></a><a class="code" href="classtree_1_1sibling__iterator.html#8def7a6f3e109876cb003f4254885ca0">02012</a> <a class="code" href="classtree_1_1sibling__iterator.html#daaf56c800ed241d36802abab3925a2a">tree<T, tree_node_allocator>::sibling_iterator::sibling_iterator</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a>& other)
1935
<a name="l02013"></a>02013 : <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>(other), <a class="code" href="classtree_1_1sibling__iterator.html#204f7449ee908f982d21cc3d334d25bc">parent_</a>(other.<a class="code" href="classtree_1_1sibling__iterator.html#204f7449ee908f982d21cc3d334d25bc">parent_</a>)
1940
1936
<a name="l02014"></a>02014 {
1941
1937
<a name="l02015"></a>02015 }
1942
1938
<a name="l02016"></a>02016
1943
1939
<a name="l02017"></a>02017 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1944
1940
<a name="l02018"></a>02018 <span class="keywordtype">void</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator::set_parent_</a>()
1945
1941
<a name="l02019"></a>02019 {
1946
<a name="l02020"></a>02020 parent_=0;
1942
<a name="l02020"></a>02020 <a class="code" href="classtree_1_1sibling__iterator.html#204f7449ee908f982d21cc3d334d25bc">parent_</a>=0;
1947
1943
<a name="l02021"></a>02021 <span class="keywordflow">if</span>(this->node==0) <span class="keywordflow">return</span>;
1948
1944
<a name="l02022"></a>02022 <span class="keywordflow">if</span>(this->node->parent!=0)
1949
<a name="l02023"></a>02023 parent_=this->node->parent;
1945
<a name="l02023"></a>02023 <a class="code" href="classtree_1_1sibling__iterator.html#204f7449ee908f982d21cc3d334d25bc">parent_</a>=this-><a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-><a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>;
1950
1946
<a name="l02024"></a>02024 }
1951
1947
<a name="l02025"></a>02025
1952
1948
<a name="l02026"></a>02026 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1953
<a name="l02027"></a>02027 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator</a>& <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator::operator++</a>()
1949
<a name="l02027"></a><a class="code" href="classtree_1_1sibling__iterator.html#8d0d647a7843432b5ccc18724fcc3493">02027</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator</a>& <a class="code" href="classtree_1_1sibling__iterator.html#8d0d647a7843432b5ccc18724fcc3493">tree<T, tree_node_allocator>::sibling_iterator::operator++</a>()
1954
1950
<a name="l02028"></a>02028 {
1955
1951
<a name="l02029"></a>02029 <span class="keywordflow">if</span>(this->node)
1956
<a name="l02030"></a>02030 this->node=this->node->next_sibling;
1952
<a name="l02030"></a>02030 this-><a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-><a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-><a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
1957
1953
<a name="l02031"></a>02031 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1958
1954
<a name="l02032"></a>02032 }
1959
1955
<a name="l02033"></a>02033
1960
1956
<a name="l02034"></a>02034 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1961
<a name="l02035"></a>02035 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator</a>& <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator::operator--</a>()
1957
<a name="l02035"></a><a class="code" href="classtree_1_1sibling__iterator.html#7e91377755da77acd20d5b9356f7498e">02035</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator</a>& <a class="code" href="classtree_1_1sibling__iterator.html#7e91377755da77acd20d5b9356f7498e">tree<T, tree_node_allocator>::sibling_iterator::operator--</a>()
1962
1958
<a name="l02036"></a>02036 {
1963
<a name="l02037"></a>02037 <span class="keywordflow">if</span>(this->node) this->node=this->node->prev_sibling;
1959
<a name="l02037"></a>02037 <span class="keywordflow">if</span>(this->node) this-><a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-><a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-><a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
1964
1960
<a name="l02038"></a>02038 <span class="keywordflow">else</span> {
1965
<a name="l02039"></a>02039 assert(parent_);
1966
<a name="l02040"></a>02040 this->node=parent_->last_child;
1961
<a name="l02039"></a>02039 assert(<a class="code" href="classtree_1_1sibling__iterator.html#204f7449ee908f982d21cc3d334d25bc">parent_</a>);
1962
<a name="l02040"></a>02040 this-><a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=<a class="code" href="classtree_1_1sibling__iterator.html#204f7449ee908f982d21cc3d334d25bc">parent_</a>-><a class="code" href="classtree__node__.html#611d3c41c716dae6bf2012e3d9152933">last_child</a>;
1967
1963
<a name="l02041"></a>02041 }
1968
1964
<a name="l02042"></a>02042 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1969
1965
<a name="l02043"></a>02043 }
1970
1966
<a name="l02044"></a>02044
1971
1967
<a name="l02045"></a>02045 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1972
<a name="l02046"></a>02046 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator</a> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator::operator++</a>(<span class="keywordtype">int</span>)
1968
<a name="l02046"></a><a class="code" href="classtree_1_1sibling__iterator.html#66b73e99c5425620a5e282fe23cdfd98">02046</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator</a> <a class="code" href="classtree_1_1sibling__iterator.html#8d0d647a7843432b5ccc18724fcc3493">tree<T, tree_node_allocator>::sibling_iterator::operator++</a>(<span class="keywordtype">int</span>)
1973
1969
<a name="l02047"></a>02047 {
1974
<a name="l02048"></a>02048 sibling_iterator copy = *<span class="keyword">this</span>;
1970
<a name="l02048"></a>02048 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> copy = *<span class="keyword">this</span>;
1975
1971
<a name="l02049"></a>02049 ++(*this);
1976
1972
<a name="l02050"></a>02050 <span class="keywordflow">return</span> copy;
1977
1973
<a name="l02051"></a>02051 }
1978
1974
<a name="l02052"></a>02052
1979
1975
<a name="l02053"></a>02053 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1980
<a name="l02054"></a>02054 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator</a> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator::operator--</a>(<span class="keywordtype">int</span>)
1976
<a name="l02054"></a><a class="code" href="classtree_1_1sibling__iterator.html#eac6e7802aabdf7050b314af8d56c81d">02054</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator</a> <a class="code" href="classtree_1_1sibling__iterator.html#7e91377755da77acd20d5b9356f7498e">tree<T, tree_node_allocator>::sibling_iterator::operator--</a>(<span class="keywordtype">int</span>)
1981
1977
<a name="l02055"></a>02055 {
1982
<a name="l02056"></a>02056 sibling_iterator copy = *<span class="keyword">this</span>;
1978
<a name="l02056"></a>02056 <a class="code" href="classtree_1_1sibling__iterator.html" title="Iterator which traverses only the nodes which are siblings of each other.">sibling_iterator</a> copy = *<span class="keyword">this</span>;
1983
1979
<a name="l02057"></a>02057 --(*this);
1984
1980
<a name="l02058"></a>02058 <span class="keywordflow">return</span> copy;
1985
1981
<a name="l02059"></a>02059 }
1986
1982
<a name="l02060"></a>02060
1987
1983
<a name="l02061"></a>02061 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator>
1988
<a name="l02062"></a>02062 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator</a>& <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator::operator+=</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num)
1984
<a name="l02062"></a><a class="code" href="classtree_1_1sibling__iterator.html#d36b6994a50c0f73154b08ab35abf336">02062</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree<T, tree_node_allocator>::sibling_iterator</a>& <a class="code" href="classtree_1_1sibling__iterator.html#d36b6994a50c0f73154b08ab35abf336">tree<T, tree_node_allocator>::sibling_iterator::operator+=</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num)
1989
1985
<a name="l02063"></a>02063 {
1990
1986
<a name="l02064"></a>02064 <span class="keywordflow">while</span>(num>0) {
1991
1987
<a name="l02065"></a>02065 ++(*this);