~mterry/ubuntu/natty/libofx/libofx.new-upstream-benoit-sru

« back to all changes in this revision

Viewing changes to doc/html/tree_8hh-source.html

  • Committer: Bazaar Package Importer
  • Author(s): Saïvann Carignan
  • Date: 2008-02-06 17:25:16 UTC
  • mto: (3.1.2 lenny)
  • mto: This revision was merged to the branch mainline in revision 11.
  • Revision ID: james.westby@ubuntu.com-20080206172516-bnzxb29igye8um9h
Tags: upstream-0.9.0
Import upstream version 0.9.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
 
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
 
2
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3
3
<title>LibOFX: tree.hh Source File</title>
4
4
<link href="doxygen.css" rel="stylesheet" type="text/css">
5
5
<link href="tabs.css" rel="stylesheet" type="text/css">
6
6
</head><body>
7
 
<!-- Generated by Doxygen 1.4.6 -->
 
7
<!-- Generated by Doxygen 1.5.3 -->
8
8
<div class="tabs">
9
9
  <ul>
10
10
    <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
11
11
    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
12
12
    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
13
 
    <li id="current"><a href="files.html"><span>Files</span></a></li>
14
 
  </ul></div>
15
 
<div class="tabs">
16
 
  <ul>
17
 
    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
18
 
    <li><a href="globals.html"><span>Globals</span></a></li>
19
 
  </ul></div>
 
13
    <li class="current"><a href="files.html"><span>Files</span></a></li>
 
14
  </ul>
 
15
</div>
20
16
<h1>tree.hh</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* </span>
21
17
<a name="l00002"></a>00002 <span class="comment"></span>
22
18
<a name="l00003"></a>00003 <span class="comment">   $Id: tree.hh,v 1.6 2006/07/20 04:41:16 benoitg Exp $</span>
56
52
<a name="l00070"></a><a class="code" href="namespacekp.html">00070</a> <span class="keyword">namespace </span>kp {
57
53
<a name="l00071"></a>00071 
58
54
<a name="l00072"></a>00072 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T1, <span class="keyword">class</span> T2&gt;
59
 
<a name="l00073"></a><a class="code" href="namespacekp.html#cc3b0ad9bfc78d3b604dfb285d01d3e5">00073</a> <span class="keywordtype">void</span> <a class="code" href="namespacekp.html#cc3b0ad9bfc78d3b604dfb285d01d3e5">constructor</a>(T1* p, T2&amp; val) 
 
55
<a name="l00073"></a><a class="code" href="namespacekp.html#d1c6c23984a78bfc8336c7ca244d6f1c">00073</a> <span class="keywordtype">void</span> <a class="code" href="namespacekp.html#d1c6c23984a78bfc8336c7ca244d6f1c">constructor</a>(T1* p, T2&amp; val) 
60
56
<a name="l00074"></a>00074    {
61
57
<a name="l00075"></a>00075    <span class="keyword">new</span> ((<span class="keywordtype">void</span> *) p) T1(val);
62
58
<a name="l00076"></a>00076    }
63
59
<a name="l00077"></a>00077 
64
60
<a name="l00078"></a>00078 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T1&gt;
65
 
<a name="l00079"></a><a class="code" href="namespacekp.html#ec4bf27cb4009889552c179c74fa9e1d">00079</a> <span class="keywordtype">void</span> <a class="code" href="namespacekp.html#cc3b0ad9bfc78d3b604dfb285d01d3e5">constructor</a>(T1* p) 
 
61
<a name="l00079"></a><a class="code" href="namespacekp.html#b625db515f044b7ddaa92769e2e6d745">00079</a> <span class="keywordtype">void</span> <a class="code" href="namespacekp.html#d1c6c23984a78bfc8336c7ca244d6f1c">constructor</a>(T1* p) 
66
62
<a name="l00080"></a>00080    {
67
63
<a name="l00081"></a>00081    <span class="keyword">new</span> ((<span class="keywordtype">void</span> *) p) T1;
68
64
<a name="l00082"></a>00082    }
69
65
<a name="l00083"></a>00083 
70
66
<a name="l00084"></a>00084 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T1&gt;
71
 
<a name="l00085"></a><a class="code" href="namespacekp.html#734effe09627ef03b0d12f076775c783">00085</a> <span class="keywordtype">void</span> <a class="code" href="namespacekp.html#734effe09627ef03b0d12f076775c783">destructor</a>(T1* p)
 
67
<a name="l00085"></a><a class="code" href="namespacekp.html#a6813c11eeb1c091cdd1eff62de70914">00085</a> <span class="keywordtype">void</span> <a class="code" href="namespacekp.html#a6813c11eeb1c091cdd1eff62de70914">destructor</a>(T1* p)
72
68
<a name="l00086"></a>00086    {
73
69
<a name="l00087"></a>00087    p-&gt;~T1();
74
70
<a name="l00088"></a>00088    }
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>&lt;<span class="keyword">class</span> T&gt;
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_&lt;T&gt;</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_&lt;T&gt;</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_&lt;T&gt;</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_&lt;T&gt;</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_&lt;T&gt;</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_&lt;T&gt;</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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator = std::allocator&lt;tree_node_&lt;T&gt; &gt; &gt;
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_&lt;T&gt;</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_&lt;T&gt;</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&amp;);
101
 
<a name="l00117"></a>00117       <a class="code" href="classtree.html#29428ae7d18d30bc26dce69586736f6e">tree</a>(<span class="keyword">const</span> iterator_base&amp;);
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&lt;T, tree_node_allocator&gt;</a>&amp;);
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&lt;T, tree_node_allocator&gt;</a>&amp;);
 
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&amp;);
 
97
<a name="l00117"></a>00117       <a class="code" href="classtree.html#a064a1d9dceac9b918c5247919a4a325">tree</a>(<span class="keyword">const</span> iterator_base&amp;);
 
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&lt;T, tree_node_allocator&gt;</a>&amp;);
 
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&lt;T, tree_node_allocator&gt;</a>&amp;);
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&lt;T, ptrdiff_t&gt; {
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&amp;                              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&amp;                              <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&amp;             operator*() <span class="keyword">const</span>;
123
 
<a name="l00140"></a>00140             T*             operator-&gt;() <span class="keyword">const</span>;
 
118
<a name="l00139"></a>00139             T&amp;             <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-&gt;</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>&amp;);
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>&amp;);
 
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>&amp;);
 
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>&amp;);
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>&amp;) <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>&amp;) <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>&amp;  operator++();
146
 
<a name="l00166"></a>00166             <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a>&amp;  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>&amp;  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>&amp;  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>&amp;) <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>&amp;) <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>&amp;  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>&amp;  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>&amp;  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>&amp;  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>&amp;);
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>&amp;);
 
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>&amp;);
 
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>&amp;);
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>&amp;) <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>&amp;) <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>&amp;  operator++();
163
 
<a name="l00184"></a>00184             <a class="code" href="classtree_1_1post__order__iterator.html">post_order_iterator</a>&amp;  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>&amp;  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>&amp;  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>&amp;) <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>&amp;) <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>&amp;  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>&amp;  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>&amp;  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>&amp;  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>&amp;);
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>&amp;);
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>&amp;);
 
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>&amp;);
 
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>&amp;);
 
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>&amp;);
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>&amp;) <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>&amp;) <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>&amp;  operator++();
185
 
<a name="l00209"></a>00209             <a class="code" href="classtree_1_1fixed__depth__iterator.html">fixed_depth_iterator</a>&amp;  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>&amp;  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>&amp;  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>&amp;) <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>&amp;) <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>&amp;  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>&amp;  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>&amp;  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>&amp;  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>&amp;);
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>&amp;);
 
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>&amp;);
 
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>&amp;);
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>&amp;) <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>&amp;) <span class="keyword">const</span>;
206
 
<a name="l00231"></a>00231             <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a>&amp;  operator++();
207
 
<a name="l00232"></a>00232             <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a>&amp;  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>&amp;  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>&amp;  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>&amp;) <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>&amp;) <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>&amp;  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>&amp;  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>&amp;  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>&amp;  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>&amp;, <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>&amp;, <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>&amp;) <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>&amp;) <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>&amp;, <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>&amp;, <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>&amp;) <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>&amp;) <span class="keyword">const</span>;
228
224
<a name="l00261"></a>00261 
229
 
<a name="l00263"></a>00263       <span class="keyword">template</span>&lt;<span class="keyword">typename</span> iter&gt; 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>&lt;<span class="keyword">typename</span> iter&gt; 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>&lt;<span class="keyword">typename</span> iter&gt; 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>&lt;<span class="keyword">typename</span> iter&gt; 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>&lt;<span class="keyword">typename</span> iter&gt; 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>&lt;<span class="keyword">typename</span> iter&gt; 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>&lt;<span class="keyword">typename</span> iter&gt; 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>&lt;<span class="keyword">typename</span> iter&gt; 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>&lt;<span class="keyword">typename</span> iter&gt; 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>&amp;);
 
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>&lt;<span class="keyword">typename</span> iter&gt; 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>&amp;);
237
233
<a name="l00277"></a>00277 
238
 
<a name="l00279"></a>00279       <span class="keyword">template</span>&lt;<span class="keyword">typename</span> iter&gt; 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>&lt;<span class="keyword">typename</span> iter&gt; 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&amp; x);
240
 
<a name="l00283"></a>00283       <span class="keyword">template</span>&lt;<span class="keyword">typename</span> iter&gt; 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>&lt;<span class="keyword">typename</span> iter&gt; 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>&lt;<span class="keyword">typename</span> iter&gt; 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>&lt;<span class="keyword">typename</span> iter&gt; 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&amp; x);
 
236
<a name="l00283"></a>00283       <span class="keyword">template</span>&lt;<span class="keyword">typename</span> iter&gt; 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>&lt;<span class="keyword">typename</span> iter&gt; 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&amp; x);
244
 
<a name="l00290"></a>00290       <span class="keyword">template</span>&lt;<span class="keyword">typename</span> iter&gt; 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&amp; 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&amp; x);
246
 
<a name="l00294"></a>00294       <span class="keyword">template</span>&lt;<span class="keyword">typename</span> iter&gt; 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>&amp; <a class="code" href="classtree.html#e0c63efd151b313a372d01f2dae19c0d">subtree</a>);
247
 
<a name="l00296"></a>00296       <span class="keyword">template</span>&lt;<span class="keyword">typename</span> iter&gt; 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&amp; 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&amp; x);
 
240
<a name="l00290"></a>00290       <span class="keyword">template</span>&lt;<span class="keyword">typename</span> iter&gt; 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&amp; 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&amp; x);
 
242
<a name="l00294"></a>00294       <span class="keyword">template</span>&lt;<span class="keyword">typename</span> iter&gt; 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>&amp; <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>&lt;<span class="keyword">typename</span> iter&gt; 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&amp; x);
248
244
<a name="l00297"></a>00297 
249
 
<a name="l00299"></a>00299       <span class="keyword">template</span>&lt;<span class="keyword">typename</span> iter&gt; 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&amp; x);
250
 
<a name="l00301"></a>00301       <span class="keyword">template</span>&lt;<span class="keyword">typename</span> iter&gt; 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>&amp; 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>&lt;<span class="keyword">typename</span> iter&gt; iter <a class="code" href="classtree.html#4885e968c82655ebebea5d0927b7e9f4" title="Replace node at &amp;#39;position&amp;#39; with other node (keeping same children); &amp;#39;position&amp;#39;...">replace</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <span class="keyword">const</span> T&amp; x);
 
246
<a name="l00301"></a>00301       <span class="keyword">template</span>&lt;<span class="keyword">typename</span> iter&gt; iter <a class="code" href="classtree.html#4885e968c82655ebebea5d0927b7e9f4" title="Replace node at &amp;#39;position&amp;#39; with other node (keeping same children); &amp;#39;position&amp;#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>&amp; 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 &amp;#39;position&amp;#39; with other node (keeping same children); &amp;#39;position&amp;#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>&lt;<span class="keyword">typename</span> iter&gt; 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>&lt;<span class="keyword">typename</span> iter&gt; 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>&lt;<span class="keyword">typename</span> iter&gt; 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>&lt;<span class="keyword">typename</span> iter&gt; iter <a class="code" href="classtree.html#479c8e3f748608a9b9fb91e58e18998c" title="Move all children of node at &amp;#39;position&amp;#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>&lt;<span class="keyword">typename</span> iter&gt; iter <a class="code" href="classtree.html#32b88523e2d5b6c78381b7da9455be5e" title="Move nodes in range to be children of &amp;#39;position&amp;#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>&lt;<span class="keyword">typename</span> iter&gt; iter <a class="code" href="classtree.html#32b88523e2d5b6c78381b7da9455be5e" title="Move nodes in range to be children of &amp;#39;position&amp;#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>&lt;<span class="keyword">typename</span> iter&gt; 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>&lt;<span class="keyword">typename</span> iter&gt; 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>&lt;<span class="keyword">typename</span> iter&gt; 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>&lt;<span class="keyword">typename</span> iter&gt; iter <a class="code" href="classtree.html#e7f72ba46cd061f71720c731b4a9bf63" title="Move &amp;#39;source&amp;#39; node (plus its children) to become the next sibling of &amp;#39;target&amp;#39;...">move_after</a>(iter target, iter source);
 
255
<a name="l00316"></a>00316       <span class="keyword">template</span>&lt;<span class="keyword">typename</span> iter&gt; iter <a class="code" href="classtree.html#b45aa15042445a81b13873d3ef4a2e86" title="Move &amp;#39;source&amp;#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>&lt;<span class="keyword">typename</span> iter&gt; iter <a class="code" href="classtree.html#a4f8b906b2758eec530e28387b819284" title="Move &amp;#39;source&amp;#39; node (plus its children) to become the node at &amp;#39;target&amp;#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>&lt;<span class="keyword">class</span> StrictWeakOrdering&gt;
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>&lt;<span class="keyword">typename</span> iter&gt;
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&amp; one, <span class="keyword">const</span> iter&amp; two, <span class="keyword">const</span> iter&amp; 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&amp; one, <span class="keyword">const</span> iter&amp; two, <span class="keyword">const</span> iter&amp; three) <span class="keyword">const</span>;
269
265
<a name="l00330"></a>00330       <span class="keyword">template</span>&lt;<span class="keyword">typename</span> iter, <span class="keyword">class</span> BinaryPredicate&gt;
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&amp; one, <span class="keyword">const</span> iter&amp; two, <span class="keyword">const</span> iter&amp; 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&amp; one, <span class="keyword">const</span> iter&amp; two, <span class="keyword">const</span> iter&amp; three, BinaryPredicate) <span class="keyword">const</span>;
271
267
<a name="l00332"></a>00332       <span class="keyword">template</span>&lt;<span class="keyword">typename</span> iter&gt;
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&amp; one, <span class="keyword">const</span> iter&amp; 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&amp; one, <span class="keyword">const</span> iter&amp; two) <span class="keyword">const</span>;
273
269
<a name="l00334"></a>00334       <span class="keyword">template</span>&lt;<span class="keyword">typename</span> iter, <span class="keyword">class</span> BinaryPredicate&gt;
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&amp; one, <span class="keyword">const</span> iter&amp; 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>&amp;, <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&amp; one, <span class="keyword">const</span> iter&amp; 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>&amp;, <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>&amp;) <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>&amp;) <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>&amp;) <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>&amp; <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>&amp; <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>&amp; <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>&amp;) <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>&amp;) <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>&amp;) <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 &amp;#39;next&amp;#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>&amp;) <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>&amp; <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>&amp; <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>&amp; <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 &amp;#39;end&amp;#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>&amp;) <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>&amp; <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 &amp;#39;index&amp;#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>&amp; <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&lt;T, tree_node_allocator&gt;::iterator_base</a>&amp; 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&lt;T, tree_node_allocator&gt;::iterator_base</a>&amp; 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&lt;T, tree_node_allocator&gt;::iterator_base</a>&amp; 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 &lt; 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_();
307
303
<a name="l00381"></a>00381          <span class="keyword">public</span>:
308
304
<a name="l00382"></a>00382             compare_nodes(StrictWeakOrdering comp) : comp_(comp) {};
309
305
<a name="l00383"></a>00383             
310
 
<a name="l00384"></a>00384             <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> <a class="code" href="classtree.html#ce325844a601660acbe7687991f8a225">tree_node</a> *a, <span class="keyword">const</span> <a class="code" href="classtree.html#ce325844a601660acbe7687991f8a225">tree_node</a> *b) 
 
306
<a name="l00384"></a>00384             <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> <a class="code" href="classtree.html#672d078d87ae97c58b732a940d7b8ca8">tree_node</a> *a, <span class="keyword">const</span> <a class="code" href="classtree.html#672d078d87ae97c58b732a940d7b8ca8">tree_node</a> *b) 
311
307
<a name="l00385"></a>00385                {
312
308
<a name="l00386"></a>00386                <span class="keyword">static</span> StrictWeakOrdering comp;
313
309
<a name="l00387"></a>00387                <span class="keywordflow">return</span> comp(a-&gt;data, b-&gt;data);
350
346
<a name="l00424"></a>00424 <span class="comment">// Tree</span>
351
347
<a name="l00425"></a>00425 
352
348
<a name="l00426"></a>00426 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
353
 
<a name="l00427"></a><a class="code" href="classtree.html#29428ae7d18d30bc26dce69586736f6e">00427</a> <a class="code" href="classtree.html#29428ae7d18d30bc26dce69586736f6e">tree&lt;T, tree_node_allocator&gt;::tree</a>() 
 
349
<a name="l00427"></a><a class="code" href="classtree.html#a064a1d9dceac9b918c5247919a4a325">00427</a> <a class="code" href="classtree.html#a064a1d9dceac9b918c5247919a4a325">tree&lt;T, tree_node_allocator&gt;::tree</a>() 
354
350
<a name="l00428"></a>00428    {
355
351
<a name="l00429"></a>00429    head_initialise_();
356
352
<a name="l00430"></a>00430    }
357
353
<a name="l00431"></a>00431 
358
354
<a name="l00432"></a>00432 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
359
 
<a name="l00433"></a><a class="code" href="classtree.html#565f863ea092305d06ab2007d86598de">00433</a> <a class="code" href="classtree.html#29428ae7d18d30bc26dce69586736f6e">tree&lt;T, tree_node_allocator&gt;::tree</a>(<span class="keyword">const</span> T&amp; x) 
 
355
<a name="l00433"></a><a class="code" href="classtree.html#5925c012af64fe91a3a5ed39e3ba9d9a">00433</a> <a class="code" href="classtree.html#a064a1d9dceac9b918c5247919a4a325">tree&lt;T, tree_node_allocator&gt;::tree</a>(<span class="keyword">const</span> T&amp; x) 
360
356
<a name="l00434"></a>00434    {
361
357
<a name="l00435"></a>00435    head_initialise_();
362
 
<a name="l00436"></a>00436    <a class="code" href="classtree.html#e6749fed3d80f2b74bb6319c4eb2af73">set_head</a>(x);
 
358
<a name="l00436"></a>00436    <a class="code" href="classtree.html#f11d736ea971ab93651350161f5a7535" title="Short-hand to insert topmost node in otherwise empty tree.">set_head</a>(x);
363
359
<a name="l00437"></a>00437    }
364
360
<a name="l00438"></a>00438 
365
361
<a name="l00439"></a>00439 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
366
 
<a name="l00440"></a><a class="code" href="classtree.html#6d418a154e9e54afdaee9748012daf40">00440</a> <a class="code" href="classtree.html#29428ae7d18d30bc26dce69586736f6e">tree&lt;T, tree_node_allocator&gt;::tree</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&amp; other)
 
362
<a name="l00440"></a><a class="code" href="classtree.html#b72378e7a772a82f90d91ef7493f27bc">00440</a> <a class="code" href="classtree.html#a064a1d9dceac9b918c5247919a4a325">tree&lt;T, tree_node_allocator&gt;::tree</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>&amp; other)
367
363
<a name="l00441"></a>00441    {
368
364
<a name="l00442"></a>00442    head_initialise_();
369
 
<a name="l00443"></a>00443    <a class="code" href="classtree.html#e6749fed3d80f2b74bb6319c4eb2af73">set_head</a>((*other));
370
 
<a name="l00444"></a>00444    <a class="code" href="classtree.html#3839ca59210cc5171bc768552cc82dbe">replace</a>(<a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">begin</a>(), other);
 
365
<a name="l00443"></a>00443    <a class="code" href="classtree.html#f11d736ea971ab93651350161f5a7535" title="Short-hand to insert topmost node in otherwise empty tree.">set_head</a>((*other));
 
366
<a name="l00444"></a>00444    <a class="code" href="classtree.html#4885e968c82655ebebea5d0927b7e9f4" title="Replace node at &amp;#39;position&amp;#39; with other node (keeping same children); &amp;#39;position&amp;#39;...">replace</a>(<a class="code" href="classtree.html#76b3a629c0208d5ae5b4ffcd4492e05e" title="Return iterator to the beginning of the tree.">begin</a>(), other);
371
367
<a name="l00445"></a>00445    }
372
368
<a name="l00446"></a>00446 
373
369
<a name="l00447"></a>00447 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
374
 
<a name="l00448"></a><a class="code" href="classtree.html#f00c3b34857694f4d02894b308b50e4b">00448</a> <a class="code" href="classtree.html#f00c3b34857694f4d02894b308b50e4b">tree&lt;T, tree_node_allocator&gt;::~tree</a>()
 
370
<a name="l00448"></a><a class="code" href="classtree.html#f0169b515c95f4299fd2d984137b7868">00448</a> <a class="code" href="classtree.html#f0169b515c95f4299fd2d984137b7868">tree&lt;T, tree_node_allocator&gt;::~tree</a>()
375
371
<a name="l00449"></a>00449    {
376
 
<a name="l00450"></a>00450    <a class="code" href="classtree.html#e7dc77e5686e51be152d43ad01fed48d">clear</a>();
377
 
<a name="l00451"></a>00451    alloc_.deallocate(<a class="code" href="classtree.html#fbb20670ecc61fe9ad3e7bd502227397">head</a>,1);
378
 
<a name="l00452"></a>00452    alloc_.deallocate(<a class="code" href="classtree.html#e45df182e3702084c6bd147d6479cc08">feet</a>,1);
 
372
<a name="l00450"></a>00450    <a class="code" href="classtree.html#a8cf6dfe17504abfc0ffabb5a4ba9d0a" title="Erase all nodes of the tree.">clear</a>();
 
373
<a name="l00451"></a>00451    alloc_.deallocate(<a class="code" href="classtree.html#10991cbf1497e125c0ef04d6e292e32b">head</a>,1);
 
374
<a name="l00452"></a>00452    alloc_.deallocate(<a class="code" href="classtree.html#e1dbb80115ba483e37d081a2256c239b">feet</a>,1);
379
375
<a name="l00453"></a>00453    }
380
376
<a name="l00454"></a>00454 
381
377
<a name="l00455"></a>00455 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
382
378
<a name="l00456"></a>00456 <span class="keywordtype">void</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::head_initialise_</a>() 
383
379
<a name="l00457"></a>00457    { 
384
 
<a name="l00458"></a>00458    <a class="code" href="classtree.html#fbb20670ecc61fe9ad3e7bd502227397">head</a> = alloc_.allocate(1,0); <span class="comment">// MSVC does not have default second argument </span>
385
 
<a name="l00459"></a>00459    <a class="code" href="classtree.html#e45df182e3702084c6bd147d6479cc08">feet</a> = alloc_.allocate(1,0);
 
380
<a name="l00458"></a>00458    <a class="code" href="classtree.html#10991cbf1497e125c0ef04d6e292e32b">head</a> = alloc_.allocate(1,0); <span class="comment">// MSVC does not have default second argument </span>
 
381
<a name="l00459"></a>00459    <a class="code" href="classtree.html#e1dbb80115ba483e37d081a2256c239b">feet</a> = alloc_.allocate(1,0);
386
382
<a name="l00460"></a>00460 
387
 
<a name="l00461"></a>00461    <a class="code" href="classtree.html#fbb20670ecc61fe9ad3e7bd502227397">head</a>-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>=0;
388
 
<a name="l00462"></a>00462    <a class="code" href="classtree.html#fbb20670ecc61fe9ad3e7bd502227397">head</a>-&gt;<a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>=0;
389
 
<a name="l00463"></a>00463    <a class="code" href="classtree.html#fbb20670ecc61fe9ad3e7bd502227397">head</a>-&gt;<a class="code" href="classtree__node__.html#f8b222dacdcdf6ca9f24f7a410e36f20">last_child</a>=0;
390
 
<a name="l00464"></a>00464    <a class="code" href="classtree.html#fbb20670ecc61fe9ad3e7bd502227397">head</a>-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=0; <span class="comment">//head;</span>
391
 
<a name="l00465"></a>00465    <a class="code" href="classtree.html#fbb20670ecc61fe9ad3e7bd502227397">head</a>-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=<a class="code" href="classtree.html#e45df182e3702084c6bd147d6479cc08">feet</a>; <span class="comment">//head;</span>
 
383
<a name="l00461"></a>00461    <a class="code" href="classtree.html#10991cbf1497e125c0ef04d6e292e32b">head</a>-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>=0;
 
384
<a name="l00462"></a>00462    <a class="code" href="classtree.html#10991cbf1497e125c0ef04d6e292e32b">head</a>-&gt;<a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>=0;
 
385
<a name="l00463"></a>00463    <a class="code" href="classtree.html#10991cbf1497e125c0ef04d6e292e32b">head</a>-&gt;<a class="code" href="classtree__node__.html#611d3c41c716dae6bf2012e3d9152933">last_child</a>=0;
 
386
<a name="l00464"></a>00464    <a class="code" href="classtree.html#10991cbf1497e125c0ef04d6e292e32b">head</a>-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=0; <span class="comment">//head;</span>
 
387
<a name="l00465"></a>00465    <a class="code" href="classtree.html#10991cbf1497e125c0ef04d6e292e32b">head</a>-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=<a class="code" href="classtree.html#e1dbb80115ba483e37d081a2256c239b">feet</a>; <span class="comment">//head;</span>
392
388
<a name="l00466"></a>00466 
393
 
<a name="l00467"></a>00467    <a class="code" href="classtree.html#e45df182e3702084c6bd147d6479cc08">feet</a>-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>=0;
394
 
<a name="l00468"></a>00468    <a class="code" href="classtree.html#e45df182e3702084c6bd147d6479cc08">feet</a>-&gt;<a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>=0;
395
 
<a name="l00469"></a>00469    <a class="code" href="classtree.html#e45df182e3702084c6bd147d6479cc08">feet</a>-&gt;<a class="code" href="classtree__node__.html#f8b222dacdcdf6ca9f24f7a410e36f20">last_child</a>=0;
396
 
<a name="l00470"></a>00470    <a class="code" href="classtree.html#e45df182e3702084c6bd147d6479cc08">feet</a>-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=<a class="code" href="classtree.html#fbb20670ecc61fe9ad3e7bd502227397">head</a>;
397
 
<a name="l00471"></a>00471    <a class="code" href="classtree.html#e45df182e3702084c6bd147d6479cc08">feet</a>-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=0;
 
389
<a name="l00467"></a>00467    <a class="code" href="classtree.html#e1dbb80115ba483e37d081a2256c239b">feet</a>-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>=0;
 
390
<a name="l00468"></a>00468    <a class="code" href="classtree.html#e1dbb80115ba483e37d081a2256c239b">feet</a>-&gt;<a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>=0;
 
391
<a name="l00469"></a>00469    <a class="code" href="classtree.html#e1dbb80115ba483e37d081a2256c239b">feet</a>-&gt;<a class="code" href="classtree__node__.html#611d3c41c716dae6bf2012e3d9152933">last_child</a>=0;
 
392
<a name="l00470"></a>00470    <a class="code" href="classtree.html#e1dbb80115ba483e37d081a2256c239b">feet</a>-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=<a class="code" href="classtree.html#10991cbf1497e125c0ef04d6e292e32b">head</a>;
 
393
<a name="l00471"></a>00471    <a class="code" href="classtree.html#e1dbb80115ba483e37d081a2256c239b">feet</a>-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=0;
398
394
<a name="l00472"></a>00472    }
399
395
<a name="l00473"></a>00473 
400
396
<a name="l00474"></a>00474 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
401
 
<a name="l00475"></a><a class="code" href="classtree.html#d6defe76c212f37bba54135643e4955f">00475</a> <span class="keywordtype">void</span> <a class="code" href="classtree.html#d6defe76c212f37bba54135643e4955f">tree&lt;T, tree_node_allocator&gt;::operator=</a>(<span class="keyword">const</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;</a>&amp; other)
 
397
<a name="l00475"></a><a class="code" href="classtree.html#9561c0c73b0605f32bf82a026eaf216a">00475</a> <span class="keywordtype">void</span> <a class="code" href="classtree.html#9561c0c73b0605f32bf82a026eaf216a">tree&lt;T, tree_node_allocator&gt;::operator=</a>(<span class="keyword">const</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;</a>&amp; other)
402
398
<a name="l00476"></a>00476    {
403
399
<a name="l00477"></a>00477    copy_(other);
404
400
<a name="l00478"></a>00478    }
405
401
<a name="l00479"></a>00479 
406
402
<a name="l00480"></a>00480 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
407
 
<a name="l00481"></a><a class="code" href="classtree.html#8b739f1a6e5059ddf64cf3394e49bcb6">00481</a> <a class="code" href="classtree.html#29428ae7d18d30bc26dce69586736f6e">tree&lt;T, tree_node_allocator&gt;::tree</a>(<span class="keyword">const</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;</a>&amp; other)
 
403
<a name="l00481"></a><a class="code" href="classtree.html#e9e06b40929dfd33a1024bd422beedb6">00481</a> <a class="code" href="classtree.html#a064a1d9dceac9b918c5247919a4a325">tree&lt;T, tree_node_allocator&gt;::tree</a>(<span class="keyword">const</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;</a>&amp; other)
408
404
<a name="l00482"></a>00482    {
409
405
<a name="l00483"></a>00483    head_initialise_();
410
406
<a name="l00484"></a>00484    copy_(other);
413
409
<a name="l00487"></a>00487 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
414
410
<a name="l00488"></a>00488 <span class="keywordtype">void</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::copy_</a>(<span class="keyword">const</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;</a>&amp; other) 
415
411
<a name="l00489"></a>00489    {
416
 
<a name="l00490"></a>00490    <a class="code" href="classtree.html#e7dc77e5686e51be152d43ad01fed48d">clear</a>();
417
 
<a name="l00491"></a>00491    pre_order_iterator it=other.<a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">begin</a>(), to=<a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">begin</a>();
418
 
<a name="l00492"></a>00492    <span class="keywordflow">while</span>(it!=other.<a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">end</a>()) {
419
 
<a name="l00493"></a>00493       to=<a class="code" href="classtree.html#fb3e3d6dd64410aa9af067e315c87360">insert</a>(to, (*it));
 
412
<a name="l00490"></a>00490    <a class="code" href="classtree.html#a8cf6dfe17504abfc0ffabb5a4ba9d0a" title="Erase all nodes of the tree.">clear</a>();
 
413
<a name="l00491"></a>00491    pre_order_iterator it=other.<a class="code" href="classtree.html#76b3a629c0208d5ae5b4ffcd4492e05e" title="Return iterator to the beginning of the tree.">begin</a>(), to=<a class="code" href="classtree.html#76b3a629c0208d5ae5b4ffcd4492e05e" title="Return iterator to the beginning of the tree.">begin</a>();
 
414
<a name="l00492"></a>00492    <span class="keywordflow">while</span>(it!=other.<a class="code" href="classtree.html#0d09fe9fd34fbfc9c9e4e28cb694448e" title="Return iterator to the end of the tree.">end</a>()) {
 
415
<a name="l00493"></a>00493       to=<a class="code" href="classtree.html#c3d19d3a42f91618267674f2c236aad9" title="Insert node as previous sibling of node pointed to by position.">insert</a>(to, (*it));
420
416
<a name="l00494"></a>00494       it.skip_children();
421
417
<a name="l00495"></a>00495       ++it;
422
418
<a name="l00496"></a>00496       }
423
 
<a name="l00497"></a>00497    to=begin();
424
 
<a name="l00498"></a>00498    it=other.<a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">begin</a>();
425
 
<a name="l00499"></a>00499    <span class="keywordflow">while</span>(it!=other.<a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">end</a>()) {
426
 
<a name="l00500"></a>00500       to=replace(to, it);
 
419
<a name="l00497"></a>00497    to=<a class="code" href="classtree.html#76b3a629c0208d5ae5b4ffcd4492e05e" title="Return iterator to the beginning of the tree.">begin</a>();
 
420
<a name="l00498"></a>00498    it=other.<a class="code" href="classtree.html#76b3a629c0208d5ae5b4ffcd4492e05e" title="Return iterator to the beginning of the tree.">begin</a>();
 
421
<a name="l00499"></a>00499    <span class="keywordflow">while</span>(it!=other.<a class="code" href="classtree.html#0d09fe9fd34fbfc9c9e4e28cb694448e" title="Return iterator to the end of the tree.">end</a>()) {
 
422
<a name="l00500"></a>00500       to=<a class="code" href="classtree.html#4885e968c82655ebebea5d0927b7e9f4" title="Replace node at &amp;#39;position&amp;#39; with other node (keeping same children); &amp;#39;position&amp;#39;...">replace</a>(to, it);
427
423
<a name="l00501"></a>00501       to.skip_children();
428
424
<a name="l00502"></a>00502       it.skip_children();
429
425
<a name="l00503"></a>00503       ++to;
432
428
<a name="l00506"></a>00506    }
433
429
<a name="l00507"></a>00507 
434
430
<a name="l00508"></a>00508 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
435
 
<a name="l00509"></a><a class="code" href="classtree.html#e7dc77e5686e51be152d43ad01fed48d">00509</a> <span class="keywordtype">void</span> <a class="code" href="classtree.html#e7dc77e5686e51be152d43ad01fed48d">tree&lt;T, tree_node_allocator&gt;::clear</a>()
 
431
<a name="l00509"></a><a class="code" href="classtree.html#a8cf6dfe17504abfc0ffabb5a4ba9d0a">00509</a> <span class="keywordtype">void</span> <a class="code" href="classtree.html#a8cf6dfe17504abfc0ffabb5a4ba9d0a" title="Erase all nodes of the tree.">tree&lt;T, tree_node_allocator&gt;::clear</a>()
436
432
<a name="l00510"></a>00510    {
437
 
<a name="l00511"></a>00511    <span class="keywordflow">if</span>(<a class="code" href="classtree.html#fbb20670ecc61fe9ad3e7bd502227397">head</a>)
438
 
<a name="l00512"></a>00512       <span class="keywordflow">while</span>(<a class="code" href="classtree.html#fbb20670ecc61fe9ad3e7bd502227397">head</a>-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>!=<a class="code" href="classtree.html#e45df182e3702084c6bd147d6479cc08">feet</a>)
439
 
<a name="l00513"></a>00513          <a class="code" href="classtree.html#fb19caa16588297c9674abb18c40a32a">erase</a>(<a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a>(<a class="code" href="classtree.html#fbb20670ecc61fe9ad3e7bd502227397">head</a>-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>));
 
433
<a name="l00511"></a>00511    <span class="keywordflow">if</span>(<a class="code" href="classtree.html#10991cbf1497e125c0ef04d6e292e32b">head</a>)
 
434
<a name="l00512"></a>00512       <span class="keywordflow">while</span>(<a class="code" href="classtree.html#10991cbf1497e125c0ef04d6e292e32b">head</a>-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>!=<a class="code" href="classtree.html#e1dbb80115ba483e37d081a2256c239b">feet</a>)
 
435
<a name="l00513"></a>00513          <a class="code" href="classtree.html#3eb424c89446ae17a747d2aca2cdda4b" title="Erase element at position pointed to by iterator, return incremented iterator.">erase</a>(<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>-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>));
440
436
<a name="l00514"></a>00514    }
441
437
<a name="l00515"></a>00515 
442
438
<a name="l00516"></a>00516 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt; 
443
 
<a name="l00517"></a><a class="code" href="classtree.html#0a3ebbed379f55e5550a7d213d0513d2">00517</a> <span class="keywordtype">void</span> <a class="code" href="classtree.html#0a3ebbed379f55e5550a7d213d0513d2">tree&lt;T, tree_node_allocator&gt;::erase_children</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&amp; it)
 
439
<a name="l00517"></a><a class="code" href="classtree.html#05d5fd71c206efc8ac30df5cd46176bc">00517</a> <span class="keywordtype">void</span> <a class="code" href="classtree.html#05d5fd71c206efc8ac30df5cd46176bc" title="Erase all children of the node pointed to by iterator.">tree&lt;T, tree_node_allocator&gt;::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>&amp; it)
444
440
<a name="l00518"></a>00518    {
445
 
<a name="l00519"></a>00519    <a class="code" href="classtree__node__.html">tree_node</a> *cur=it.node-&gt;first_child;
446
 
<a name="l00520"></a>00520    <a class="code" href="classtree__node__.html">tree_node</a> *prev=0;
 
441
<a name="l00519"></a>00519    <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-&gt;first_child;
 
442
<a name="l00520"></a>00520    <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> *prev=0;
447
443
<a name="l00521"></a>00521 
448
444
<a name="l00522"></a>00522    <span class="keywordflow">while</span>(cur!=0) {
449
445
<a name="l00523"></a>00523       prev=cur;
450
 
<a name="l00524"></a>00524       cur=cur-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
451
 
<a name="l00525"></a>00525       <a class="code" href="classtree.html#0a3ebbed379f55e5550a7d213d0513d2">erase_children</a>(<a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a>(prev));
452
 
<a name="l00526"></a>00526       <a class="code" href="namespacekp.html#734effe09627ef03b0d12f076775c783">kp::destructor</a>(&amp;prev-&gt;<a class="code" href="classtree__node__.html#ec3d00d908b82e0d429a431e566fed95">data</a>);
 
446
<a name="l00524"></a>00524       cur=cur-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
 
447
<a name="l00525"></a>00525       <a class="code" href="classtree.html#05d5fd71c206efc8ac30df5cd46176bc" title="Erase all children of the node pointed to by iterator.">erase_children</a>(<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>(prev));
 
448
<a name="l00526"></a>00526       <a class="code" href="namespacekp.html#a6813c11eeb1c091cdd1eff62de70914">kp::destructor</a>(&amp;prev-&gt;<a class="code" href="classtree__node__.html#4c15077a3ad0552413d1268ee4be1bef">data</a>);
453
449
<a name="l00527"></a>00527       alloc_.deallocate(prev,1);
454
450
<a name="l00528"></a>00528       }
455
451
<a name="l00529"></a>00529    it.node-&gt;first_child=0;
458
454
<a name="l00532"></a>00532 
459
455
<a name="l00533"></a>00533 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt; 
460
456
<a name="l00534"></a>00534 <span class="keyword">template</span>&lt;<span class="keyword">class</span> iter&gt;
461
 
<a name="l00535"></a><a class="code" href="classtree.html#fb19caa16588297c9674abb18c40a32a">00535</a> iter <a class="code" href="classtree.html#fb19caa16588297c9674abb18c40a32a">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::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-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>==0) {
470
 
<a name="l00544"></a>00544       cur-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>-&gt;first_child=cur-&gt;<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-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>==0) {
 
466
<a name="l00544"></a>00544       cur-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>-&gt;first_child=cur-&gt;<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-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>-&gt;next_sibling=cur-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
 
469
<a name="l00547"></a>00547       cur-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>-&gt;next_sibling=cur-&gt;<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-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>==0) {
476
 
<a name="l00550"></a>00550       cur-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>-&gt;last_child=cur-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
 
471
<a name="l00549"></a>00549    <span class="keywordflow">if</span>(cur-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>==0) {
 
472
<a name="l00550"></a>00550       cur-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>-&gt;last_child=cur-&gt;<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-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>-&gt;prev_sibling=cur-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
 
475
<a name="l00553"></a>00553       cur-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>-&gt;prev_sibling=cur-&gt;<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>(&amp;cur-&gt;<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>(&amp;cur-&gt;<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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
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&lt;T, tree_node_allocator&gt;::pre_order_iterator</a> <a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::pre_order_iterator</a> <a class="code" href="classtree.html#76b3a629c0208d5ae5b4ffcd4492e05e" title="Return iterator to the beginning of the tree.">tree&lt;T, tree_node_allocator&gt;::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>-&gt;<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>-&gt;<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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
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&lt;T, tree_node_allocator&gt;::pre_order_iterator</a> <a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::pre_order_iterator</a> <a class="code" href="classtree.html#0d09fe9fd34fbfc9c9e4e28cb694448e" title="Return iterator to the end of the tree.">tree&lt;T, tree_node_allocator&gt;::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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
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&lt;T, tree_node_allocator&gt;::post_order_iterator</a> <a class="code" href="classtree.html#6c02eb9372a46a6f75f5306501a2d328">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::post_order_iterator</a> <a class="code" href="classtree.html#73c673d39fe46db7ca4e1533841cdbc0" title="Return post-order iterator to the beginning of the tree.">tree&lt;T, tree_node_allocator&gt;::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>-&gt;<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-&gt;<a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>)
505
 
<a name="l00579"></a>00579          tmp=tmp-&gt;<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>-&gt;<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-&gt;<a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>)
 
501
<a name="l00579"></a>00579          tmp=tmp-&gt;<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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
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&lt;T, tree_node_allocator&gt;::post_order_iterator</a> <a class="code" href="classtree.html#230eeb27fe063d07a18ee4020896c1cb">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::post_order_iterator</a> <a class="code" href="classtree.html#d339ab550fc2718e84506e91960a177f" title="Return post-order iterator to the end of the tree.">tree&lt;T, tree_node_allocator&gt;::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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
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&lt;T, tree_node_allocator&gt;::fixed_depth_iterator</a> <a class="code" href="classtree.html#4e811cfdd89077e8a2d6a0e54ded5156">tree&lt;T, tree_node_allocator&gt;::begin_fixed</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&amp; 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&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::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>&amp; 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&lt;dp) { <span class="comment">// go down one level</span>
522
 
<a name="l00596"></a>00596       <span class="keywordflow">while</span>(tmp-&gt;<a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>==0) {
523
 
<a name="l00597"></a>00597          tmp=tmp-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
 
518
<a name="l00596"></a>00596       <span class="keywordflow">while</span>(tmp-&gt;<a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>==0) {
 
519
<a name="l00597"></a>00597          tmp=tmp-&gt;<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-&gt;<a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>;
 
523
<a name="l00601"></a>00601       tmp=tmp-&gt;<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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
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&lt;T, tree_node_allocator&gt;::fixed_depth_iterator</a> <a class="code" href="classtree.html#2fbf1396c3067d11f47950fb879edbb9">tree&lt;T, tree_node_allocator&gt;::end_fixed</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&amp; 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&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::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>&amp; 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&lt;dp) { <span class="comment">// go down one level</span>
540
 
<a name="l00614"></a>00614       <span class="keywordflow">while</span>(tmp-&gt;<a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>==0) {
541
 
<a name="l00615"></a>00615          tmp=tmp-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
 
536
<a name="l00614"></a>00614       <span class="keywordflow">while</span>(tmp-&gt;<a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>==0) {
 
537
<a name="l00615"></a>00615          tmp=tmp-&gt;<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-&gt;<a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>;
 
541
<a name="l00619"></a>00619       tmp=tmp-&gt;<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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
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&lt;T, tree_node_allocator&gt;::sibling_iterator</a> <a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">tree&lt;T, tree_node_allocator&gt;::begin</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&amp; 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&lt;T, tree_node_allocator&gt;::sibling_iterator</a> <a class="code" href="classtree.html#76b3a629c0208d5ae5b4ffcd4492e05e" title="Return iterator to the beginning of the tree.">tree&lt;T, tree_node_allocator&gt;::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>&amp; 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-&gt;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-&gt;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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
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&lt;T, tree_node_allocator&gt;::sibling_iterator</a> <a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">tree&lt;T, tree_node_allocator&gt;::end</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&amp; 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&lt;T, tree_node_allocator&gt;::sibling_iterator</a> <a class="code" href="classtree.html#0d09fe9fd34fbfc9c9e4e28cb694448e" title="Return iterator to the end of the tree.">tree&lt;T, tree_node_allocator&gt;::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>&amp; 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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
569
565
<a name="l00643"></a>00643 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> iter&gt;
570
 
<a name="l00644"></a><a class="code" href="classtree.html#a00c1035eb3750d402f0830196264e7f">00644</a> iter <a class="code" href="classtree.html#a00c1035eb3750d402f0830196264e7f">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::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-&gt;parent);
575
571
<a name="l00649"></a>00649 
576
572
<a name="l00650"></a>00650 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
577
573
<a name="l00651"></a>00651 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> iter&gt;
578
 
<a name="l00652"></a><a class="code" href="classtree.html#2521b543afdcb57b969e77c910141e12">00652</a> iter <a class="code" href="classtree.html#2521b543afdcb57b969e77c910141e12">tree&lt;T, tree_node_allocator&gt;::previous_sibling</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>)<span class="keyword"> const</span>
 
574
<a name="l00652"></a><a class="code" href="classtree.html#6d38ef0b2b73266cbc39ab021482bb50">00652</a> iter <a class="code" href="classtree.html#6d38ef0b2b73266cbc39ab021482bb50" title="Return iterator to the previous sibling of a node.">tree&lt;T, tree_node_allocator&gt;::previous_sibling</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>)<span class="keyword"> const</span>
579
575
<a name="l00653"></a>00653 <span class="keyword">   </span>{
580
576
<a name="l00654"></a>00654    assert(position.node!=0);
581
577
<a name="l00655"></a>00655    iter ret(position);
585
581
<a name="l00659"></a>00659 
586
582
<a name="l00660"></a>00660 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
587
583
<a name="l00661"></a>00661 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> iter&gt;
588
 
<a name="l00662"></a><a class="code" href="classtree.html#0d28ed2bd76b14ee168f5497159e685f">00662</a> iter <a class="code" href="classtree.html#0d28ed2bd76b14ee168f5497159e685f">tree&lt;T, tree_node_allocator&gt;::next_sibling</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>)<span class="keyword"> const</span>
 
584
<a name="l00662"></a><a class="code" href="classtree.html#4e3ea50e0949bd05e27ecb9c6b7162ff">00662</a> iter <a class="code" href="classtree.html#4e3ea50e0949bd05e27ecb9c6b7162ff" title="Return iterator to the next sibling of a node.">tree&lt;T, tree_node_allocator&gt;::next_sibling</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>)<span class="keyword"> const</span>
589
585
<a name="l00663"></a>00663 <span class="keyword">   </span>{
590
586
<a name="l00664"></a>00664    assert(position.node!=0);
591
587
<a name="l00665"></a>00665    iter ret(position);
595
591
<a name="l00669"></a>00669 
596
592
<a name="l00670"></a>00670 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
597
593
<a name="l00671"></a>00671 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> iter&gt;
598
 
<a name="l00672"></a><a class="code" href="classtree.html#a6d518c3d4ab2359cce1e5bf50a675c0">00672</a> iter <a class="code" href="classtree.html#a6d518c3d4ab2359cce1e5bf50a675c0">tree&lt;T, tree_node_allocator&gt;::next_at_same_depth</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>)<span class="keyword"> const</span>
 
594
<a name="l00672"></a><a class="code" href="classtree.html#ce3b299e157ec177230a0144771b2a7e">00672</a> iter <a class="code" href="classtree.html#ce3b299e157ec177230a0144771b2a7e" title="Return iterator to the next node at a given depth.">tree&lt;T, tree_node_allocator&gt;::next_at_same_depth</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>)<span class="keyword"> const</span>
599
595
<a name="l00673"></a>00673 <span class="keyword">   </span>{
600
596
<a name="l00674"></a>00674    assert(position.node!=0);
601
597
<a name="l00675"></a>00675    iter ret(position);
633
629
<a name="l00707"></a>00707 
634
630
<a name="l00708"></a>00708 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
635
631
<a name="l00709"></a>00709 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> iter&gt;
636
 
<a name="l00710"></a><a class="code" href="classtree.html#61f096e7fbd483ff1fc1b56fe25ffcf3">00710</a> iter <a class="code" href="classtree.html#61f096e7fbd483ff1fc1b56fe25ffcf3">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::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>(&amp;tmp-&gt;<a class="code" href="classtree__node__.html#ec3d00d908b82e0d429a431e566fed95">data</a>);
642
 
<a name="l00716"></a>00716    tmp-&gt;<a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>=0;
643
 
<a name="l00717"></a>00717    tmp-&gt;<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>(&amp;tmp-&gt;<a class="code" href="classtree__node__.html#4c15077a3ad0552413d1268ee4be1bef">data</a>);
 
638
<a name="l00716"></a>00716    tmp-&gt;<a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>=0;
 
639
<a name="l00717"></a>00717    tmp-&gt;<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-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>=position.node;
 
641
<a name="l00719"></a>00719    tmp-&gt;<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-&gt;last_child!=0) {
647
643
<a name="l00721"></a>00721       position.node-&gt;last_child-&gt;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-&gt;<a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>=tmp;
 
646
<a name="l00724"></a>00724       position.node-&gt;<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-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=position.node-&gt;last_child;
 
648
<a name="l00726"></a>00726    tmp-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=position.node-&gt;last_child;
653
649
<a name="l00727"></a>00727    position.node-&gt;last_child=tmp;
654
 
<a name="l00728"></a>00728    tmp-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=0;
 
650
<a name="l00728"></a>00728    tmp-&gt;<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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
659
655
<a name="l00733"></a>00733 <span class="keyword">template</span> &lt;<span class="keyword">class</span> iter&gt;
660
 
<a name="l00734"></a><a class="code" href="classtree.html#49df1c6371247b89892e0bb703a3074c">00734</a> iter <a class="code" href="classtree.html#61f096e7fbd483ff1fc1b56fe25ffcf3">tree&lt;T, tree_node_allocator&gt;::append_child</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, <span class="keyword">const</span> T&amp; 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&lt;T, tree_node_allocator&gt;::append_child</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <span class="keyword">const</span> T&amp; 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>(&amp;tmp-&gt;<a class="code" href="classtree__node__.html#ec3d00d908b82e0d429a431e566fed95">data</a>, x);
670
 
<a name="l00744"></a>00744    tmp-&gt;<a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>=0;
671
 
<a name="l00745"></a>00745    tmp-&gt;<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>(&amp;tmp-&gt;<a class="code" href="classtree__node__.html#4c15077a3ad0552413d1268ee4be1bef">data</a>, x);
 
666
<a name="l00744"></a>00744    tmp-&gt;<a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>=0;
 
667
<a name="l00745"></a>00745    tmp-&gt;<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-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>=position.node;
 
669
<a name="l00747"></a>00747    tmp-&gt;<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-&gt;last_child!=0) {
675
671
<a name="l00749"></a>00749       position.node-&gt;last_child-&gt;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-&gt;<a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>=tmp;
 
674
<a name="l00752"></a>00752       position.node-&gt;<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-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=position.node-&gt;last_child;
 
676
<a name="l00754"></a>00754    tmp-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=position.node-&gt;last_child;
681
677
<a name="l00755"></a>00755    position.node-&gt;last_child=tmp;
682
 
<a name="l00756"></a>00756    tmp-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=0;
 
678
<a name="l00756"></a>00756    tmp-&gt;<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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
687
683
<a name="l00761"></a>00761 <span class="keyword">template</span> &lt;<span class="keyword">class</span> iter&gt;
688
 
<a name="l00762"></a><a class="code" href="classtree.html#c35cc7e116ac7caced91fa1ae129073a">00762</a> iter <a class="code" href="classtree.html#61f096e7fbd483ff1fc1b56fe25ffcf3">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::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 &amp;#39;position&amp;#39; with other node (keeping same children); &amp;#39;position&amp;#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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
697
693
<a name="l00771"></a>00771 <span class="keyword">template</span> &lt;<span class="keyword">class</span> iter&gt;
698
 
<a name="l00772"></a><a class="code" href="classtree.html#b73148412a532d3216fb9741bc8c4e67">00772</a> iter <a class="code" href="classtree.html#b73148412a532d3216fb9741bc8c4e67">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
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&lt;T, tree_node_allocator&gt;::pre_order_iterator</a> <a class="code" href="classtree.html#e6749fed3d80f2b74bb6319c4eb2af73">tree&lt;T, tree_node_allocator&gt;::set_head</a>(<span class="keyword">const</span> T&amp; 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&lt;T, tree_node_allocator&gt;::pre_order_iterator</a> <a class="code" href="classtree.html#f11d736ea971ab93651350161f5a7535" title="Short-hand to insert topmost node in otherwise empty tree.">tree&lt;T, tree_node_allocator&gt;::set_head</a>(<span class="keyword">const</span> T&amp; x)
711
707
<a name="l00785"></a>00785    {
712
 
<a name="l00786"></a>00786    assert(<a class="code" href="classtree.html#fbb20670ecc61fe9ad3e7bd502227397">head</a>-&gt;<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>-&gt;<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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
717
713
<a name="l00791"></a>00791 <span class="keyword">template</span> &lt;<span class="keyword">class</span> iter&gt;
718
 
<a name="l00792"></a><a class="code" href="classtree.html#fb3e3d6dd64410aa9af067e315c87360">00792</a> iter <a class="code" href="classtree.html#fb3e3d6dd64410aa9af067e315c87360">tree&lt;T, tree_node_allocator&gt;::insert</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, <span class="keyword">const</span> T&amp; 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&lt;T, tree_node_allocator&gt;::insert</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <span class="keyword">const</span> T&amp; 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>(&amp;tmp-&gt;<a class="code" href="classtree__node__.html#ec3d00d908b82e0d429a431e566fed95">data</a>, x);
726
 
<a name="l00800"></a>00800    tmp-&gt;<a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>=0;
727
 
<a name="l00801"></a>00801    tmp-&gt;<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>(&amp;tmp-&gt;<a class="code" href="classtree__node__.html#4c15077a3ad0552413d1268ee4be1bef">data</a>, x);
 
722
<a name="l00800"></a>00800    tmp-&gt;<a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>=0;
 
723
<a name="l00801"></a>00801    tmp-&gt;<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-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>=position.node-&gt;parent;
730
 
<a name="l00804"></a>00804    tmp-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=position.node;
731
 
<a name="l00805"></a>00805    tmp-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=position.node-&gt;prev_sibling;
 
725
<a name="l00803"></a>00803    tmp-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>=position.node-&gt;parent;
 
726
<a name="l00804"></a>00804    tmp-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=position.node;
 
727
<a name="l00805"></a>00805    tmp-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=position.node-&gt;prev_sibling;
732
728
<a name="l00806"></a>00806    position.node-&gt;prev_sibling=tmp;
733
729
<a name="l00807"></a>00807 
734
 
<a name="l00808"></a>00808    <span class="keywordflow">if</span>(tmp-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>==0) {
735
 
<a name="l00809"></a>00809       <span class="keywordflow">if</span>(tmp-&gt;<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-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>-&gt;first_child=tmp;
 
730
<a name="l00808"></a>00808    <span class="keywordflow">if</span>(tmp-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>==0) {
 
731
<a name="l00809"></a>00809       <span class="keywordflow">if</span>(tmp-&gt;<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-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>-&gt;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-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>-&gt;next_sibling=tmp;
 
735
<a name="l00813"></a>00813       tmp-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>-&gt;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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
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&lt;T, tree_node_allocator&gt;::sibling_iterator</a> <a class="code" href="classtree.html#fb3e3d6dd64410aa9af067e315c87360">tree&lt;T, tree_node_allocator&gt;::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&amp; 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&lt;T, tree_node_allocator&gt;::sibling_iterator</a> <a class="code" href="classtree.html#c3d19d3a42f91618267674f2c236aad9" title="Insert node as previous sibling of node pointed to by position.">tree&lt;T, tree_node_allocator&gt;::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&amp; 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>(&amp;tmp-&gt;<a class="code" href="classtree__node__.html#ec3d00d908b82e0d429a431e566fed95">data</a>, x);
748
 
<a name="l00822"></a>00822    tmp-&gt;<a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>=0;
749
 
<a name="l00823"></a>00823    tmp-&gt;<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>(&amp;tmp-&gt;<a class="code" href="classtree__node__.html#4c15077a3ad0552413d1268ee4be1bef">data</a>, x);
 
744
<a name="l00822"></a>00822    tmp-&gt;<a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>=0;
 
745
<a name="l00823"></a>00823    tmp-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>-&gt;last_child=tmp;
 
747
<a name="l00825"></a>00825    tmp-&gt;<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-&gt;<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-&gt;<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-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>-&gt;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-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>=<a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>.node-&gt;parent;
759
 
<a name="l00833"></a>00833       tmp-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=<a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>.node-&gt;prev_sibling;
760
 
<a name="l00834"></a>00834       <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>.node-&gt;prev_sibling=tmp;
 
754
<a name="l00832"></a>00832       tmp-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>=position.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>;
 
755
<a name="l00833"></a>00833       tmp-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=position.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<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>-&gt;<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-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>==0) {
764
 
<a name="l00838"></a>00838       <span class="keywordflow">if</span>(tmp-&gt;<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-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>-&gt;first_child=tmp;
 
759
<a name="l00837"></a>00837    <span class="keywordflow">if</span>(tmp-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>==0) {
 
760
<a name="l00838"></a>00838       <span class="keywordflow">if</span>(tmp-&gt;<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-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>-&gt;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-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>-&gt;next_sibling=tmp;
 
764
<a name="l00842"></a>00842       tmp-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>-&gt;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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
773
769
<a name="l00847"></a>00847 <span class="keyword">template</span> &lt;<span class="keyword">class</span> iter&gt;
774
 
<a name="l00848"></a><a class="code" href="classtree.html#9be9c658ab428eb962c55bef3f872b47">00848</a> iter <a class="code" href="classtree.html#9be9c658ab428eb962c55bef3f872b47">tree&lt;T, tree_node_allocator&gt;::insert_after</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, <span class="keyword">const</span> T&amp; 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&lt;T, tree_node_allocator&gt;::insert_after</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <span class="keyword">const</span> T&amp; 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>(&amp;tmp-&gt;<a class="code" href="classtree__node__.html#ec3d00d908b82e0d429a431e566fed95">data</a>, x);
778
 
<a name="l00852"></a>00852    tmp-&gt;<a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>=0;
779
 
<a name="l00853"></a>00853    tmp-&gt;<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>(&amp;tmp-&gt;<a class="code" href="classtree__node__.html#4c15077a3ad0552413d1268ee4be1bef">data</a>, x);
 
774
<a name="l00852"></a>00852    tmp-&gt;<a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>=0;
 
775
<a name="l00853"></a>00853    tmp-&gt;<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-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>=position.node-&gt;parent;
782
 
<a name="l00856"></a>00856    tmp-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=position.node;
783
 
<a name="l00857"></a>00857    tmp-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=position.node-&gt;next_sibling;
 
777
<a name="l00855"></a>00855    tmp-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>=position.node-&gt;parent;
 
778
<a name="l00856"></a>00856    tmp-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=position.node;
 
779
<a name="l00857"></a>00857    tmp-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=position.node-&gt;next_sibling;
784
780
<a name="l00858"></a>00858    position.node-&gt;next_sibling=tmp;
785
781
<a name="l00859"></a>00859 
786
 
<a name="l00860"></a>00860    <span class="keywordflow">if</span>(tmp-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>==0) {
787
 
<a name="l00861"></a>00861       <span class="keywordflow">if</span>(tmp-&gt;<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-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>-&gt;last_child=tmp;
 
782
<a name="l00860"></a>00860    <span class="keywordflow">if</span>(tmp-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>==0) {
 
783
<a name="l00861"></a>00861       <span class="keywordflow">if</span>(tmp-&gt;<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-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>-&gt;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-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>-&gt;prev_sibling=tmp;
 
787
<a name="l00865"></a>00865       tmp-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>-&gt;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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
797
793
<a name="l00871"></a>00871 <span class="keyword">template</span> &lt;<span class="keyword">class</span> iter&gt;
798
 
<a name="l00872"></a><a class="code" href="classtree.html#6c41a7abd2827c9193f03ea0a51e8e30">00872</a> iter <a class="code" href="classtree.html#6c41a7abd2827c9193f03ea0a51e8e30">tree&lt;T, tree_node_allocator&gt;::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>&amp; 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&lt;T, tree_node_allocator&gt;::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>&amp; <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 &amp;#39;position&amp;#39; with other node (keeping same children); &amp;#39;position&amp;#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 &lt;class T, class tree_node_allocator&gt;</span>
815
811
<a name="l00889"></a>00889 
816
812
<a name="l00890"></a>00890 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
817
813
<a name="l00891"></a>00891 <span class="keyword">template</span> &lt;<span class="keyword">class</span> iter&gt;
818
 
<a name="l00892"></a><a class="code" href="classtree.html#3839ca59210cc5171bc768552cc82dbe">00892</a> iter <a class="code" href="classtree.html#3839ca59210cc5171bc768552cc82dbe">tree&lt;T, tree_node_allocator&gt;::replace</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>, <span class="keyword">const</span> T&amp; 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 &amp;#39;position&amp;#39; with other node (keeping same children); &amp;#39;position&amp;#39;...">tree&lt;T, tree_node_allocator&gt;::replace</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>, <span class="keyword">const</span> T&amp; x)
819
815
<a name="l00893"></a>00893    {
820
 
<a name="l00894"></a>00894    <a class="code" href="namespacekp.html#734effe09627ef03b0d12f076775c783">kp::destructor</a>(&amp;position.node-&gt;data);
821
 
<a name="l00895"></a>00895    <a class="code" href="namespacekp.html#cc3b0ad9bfc78d3b604dfb285d01d3e5">kp::constructor</a>(&amp;position.node-&gt;data, x);
 
816
<a name="l00894"></a>00894    <a class="code" href="namespacekp.html#a6813c11eeb1c091cdd1eff62de70914">kp::destructor</a>(&amp;position.node-&gt;data);
 
817
<a name="l00895"></a>00895    <a class="code" href="namespacekp.html#d1c6c23984a78bfc8336c7ca244d6f1c">kp::constructor</a>(&amp;position.node-&gt;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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
826
822
<a name="l00900"></a>00900 <span class="keyword">template</span> &lt;<span class="keyword">class</span> iter&gt;
827
 
<a name="l00901"></a><a class="code" href="classtree.html#d4c8f84d956933e4137769a126b02cab">00901</a> iter <a class="code" href="classtree.html#3839ca59210cc5171bc768552cc82dbe">tree&lt;T, tree_node_allocator&gt;::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>&amp; 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 &amp;#39;position&amp;#39; with other node (keeping same children); &amp;#39;position&amp;#39;...">tree&lt;T, tree_node_allocator&gt;::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>&amp; 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>(&amp;tmp-&gt;<a class="code" href="classtree__node__.html#ec3d00d908b82e0d429a431e566fed95">data</a>, (*from));
838
 
<a name="l00912"></a>00912    tmp-&gt;<a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a>=0;
839
 
<a name="l00913"></a>00913    tmp-&gt;<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-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>==0) {
841
 
<a name="l00915"></a>00915       current_to-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>-&gt;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>(&amp;tmp-&gt;<a class="code" href="classtree__node__.html#4c15077a3ad0552413d1268ee4be1bef">data</a>, (*from));
 
834
<a name="l00912"></a>00912    tmp-&gt;<a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>=0;
 
835
<a name="l00913"></a>00913    tmp-&gt;<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-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>==0) {
 
837
<a name="l00915"></a>00915       current_to-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>-&gt;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-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>-&gt;next_sibling=tmp;
 
840
<a name="l00918"></a>00918       current_to-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>-&gt;next_sibling=tmp;
845
841
<a name="l00919"></a>00919       }
846
 
<a name="l00920"></a>00920    tmp-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=current_to-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
847
 
<a name="l00921"></a>00921    <span class="keywordflow">if</span>(current_to-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>==0) {
848
 
<a name="l00922"></a>00922       current_to-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>-&gt;last_child=tmp;
 
842
<a name="l00920"></a>00920    tmp-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=current_to-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
 
843
<a name="l00921"></a>00921    <span class="keywordflow">if</span>(current_to-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>==0) {
 
844
<a name="l00922"></a>00922       current_to-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>-&gt;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-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>-&gt;prev_sibling=tmp;
 
847
<a name="l00925"></a>00925       current_to-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>-&gt;prev_sibling=tmp;
852
848
<a name="l00926"></a>00926       }
853
 
<a name="l00927"></a>00927    tmp-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=current_to-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
854
 
<a name="l00928"></a>00928    tmp-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>=current_to-&gt;<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>(&amp;current_to-&gt;<a class="code" href="classtree__node__.html#ec3d00d908b82e0d429a431e566fed95">data</a>);
 
849
<a name="l00927"></a>00927    tmp-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=current_to-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
 
850
<a name="l00928"></a>00928    tmp-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>=current_to-&gt;<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>(&amp;current_to-&gt;<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-&gt;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-&gt;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-&gt;<a class="code" href="classtree__node__.html#9639ccb36cb660e3dc429bccf6e09c50">first_child</a> != 0) {
867
 
<a name="l00941"></a>00941          current_from=current_from-&gt;<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-&gt;<a class="code" href="classtree__node__.html#ec3d00d908b82e0d429a431e566fed95">data</a>);
 
862
<a name="l00940"></a>00940       <span class="keywordflow">if</span>(current_from-&gt;<a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a> != 0) {
 
863
<a name="l00941"></a>00941          current_from=current_from-&gt;<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-&gt;<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-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>==0 &amp;&amp; current_from!=start_from) {
872
 
<a name="l00946"></a>00946             current_from=current_from-&gt;<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-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>==0 &amp;&amp; current_from!=start_from) {
 
868
<a name="l00946"></a>00946             current_from=current_from-&gt;<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-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
 
872
<a name="l00950"></a>00950          current_from=current_from-&gt;<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-&gt;<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-&gt;<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);
884
880
<a name="l00958"></a>00958    }
885
881
<a name="l00959"></a>00959 
886
882
<a name="l00960"></a>00960 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
887
 
<a name="l00961"></a><a class="code" href="classtree.html#99c13db9741d7362312eed0ab1a76d61">00961</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::sibling_iterator</a> <a class="code" href="classtree.html#3839ca59210cc5171bc768552cc82dbe">tree&lt;T, tree_node_allocator&gt;::replace</a>(
888
 
<a name="l00962"></a>00962    <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> orig_begin, 
889
 
<a name="l00963"></a>00963    <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> orig_end, 
890
 
<a name="l00964"></a>00964    <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> new_begin, 
891
 
<a name="l00965"></a>00965    <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> new_end)
 
883
<a name="l00961"></a><a class="code" href="classtree.html#fc5bef13996f2fd939d83837aa8e090d">00961</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::sibling_iterator</a> <a class="code" href="classtree.html#4885e968c82655ebebea5d0927b7e9f4" title="Replace node at &amp;#39;position&amp;#39; with other node (keeping same children); &amp;#39;position&amp;#39;...">tree&lt;T, tree_node_allocator&gt;::replace</a>(
 
884
<a name="l00962"></a>00962    <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, 
 
885
<a name="l00963"></a>00963    <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, 
 
886
<a name="l00964"></a>00964    <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, 
 
887
<a name="l00965"></a>00965    <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)
892
888
<a name="l00966"></a>00966    {
893
 
<a name="l00967"></a>00967    <a class="code" href="classtree__node__.html">tree_node</a> *orig_first=orig_begin.node;
894
 
<a name="l00968"></a>00968    <a class="code" href="classtree__node__.html">tree_node</a> *new_first=new_begin.node;
895
 
<a name="l00969"></a>00969    <a class="code" href="classtree__node__.html">tree_node</a> *orig_last=orig_first;
 
889
<a name="l00967"></a>00967    <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> *orig_first=orig_begin.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>;
 
890
<a name="l00968"></a>00968    <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> *new_first=new_begin.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>;
 
891
<a name="l00969"></a>00969    <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> *orig_last=orig_first;
896
892
<a name="l00970"></a>00970    <span class="keywordflow">while</span>((++orig_begin)!=orig_end)
897
 
<a name="l00971"></a>00971       orig_last=orig_last-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
898
 
<a name="l00972"></a>00972    <a class="code" href="classtree__node__.html">tree_node</a> *new_last=new_first;
 
893
<a name="l00971"></a>00971       orig_last=orig_last-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
 
894
<a name="l00972"></a>00972    <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> *new_last=new_first;
899
895
<a name="l00973"></a>00973    <span class="keywordflow">while</span>((++new_begin)!=new_end)
900
 
<a name="l00974"></a>00974       new_last=new_last-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
 
896
<a name="l00974"></a>00974       new_last=new_last-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
901
897
<a name="l00975"></a>00975 
902
898
<a name="l00976"></a>00976    <span class="comment">// insert all siblings in new_first..new_last before orig_first</span>
903
899
<a name="l00977"></a>00977    <span class="keywordtype">bool</span> first=<span class="keyword">true</span>;
904
 
<a name="l00978"></a>00978    <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a> ret;
 
900
<a name="l00978"></a>00978    <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> ret;
905
901
<a name="l00979"></a>00979    <span class="keywordflow">while</span>(1==1) {
906
 
<a name="l00980"></a>00980       <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a> tt=<a class="code" href="classtree.html#6c41a7abd2827c9193f03ea0a51e8e30">insert_subtree</a>(<a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a>(orig_first), <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a>(new_first));
 
902
<a name="l00980"></a>00980       <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> tt=<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>(<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>(orig_first), <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>(new_first));
907
903
<a name="l00981"></a>00981       <span class="keywordflow">if</span>(first) {
908
904
<a name="l00982"></a>00982          ret=tt;
909
905
<a name="l00983"></a>00983          first=<span class="keyword">false</span>;
910
906
<a name="l00984"></a>00984          }
911
907
<a name="l00985"></a>00985       <span class="keywordflow">if</span>(new_first==new_last)
912
908
<a name="l00986"></a>00986          <span class="keywordflow">break</span>;
913
 
<a name="l00987"></a>00987       new_first=new_first-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
 
909
<a name="l00987"></a>00987       new_first=new_first-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
914
910
<a name="l00988"></a>00988       }
915
911
<a name="l00989"></a>00989 
916
912
<a name="l00990"></a>00990    <span class="comment">// erase old range of siblings</span>
917
913
<a name="l00991"></a>00991    <span class="keywordtype">bool</span> last=<span class="keyword">false</span>;
918
 
<a name="l00992"></a>00992    <a class="code" href="classtree__node__.html">tree_node</a> *next=orig_first;
 
914
<a name="l00992"></a>00992    <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> *next=orig_first;
919
915
<a name="l00993"></a>00993    <span class="keywordflow">while</span>(1==1) {
920
916
<a name="l00994"></a>00994       <span class="keywordflow">if</span>(next==orig_last) 
921
917
<a name="l00995"></a>00995          last=<span class="keyword">true</span>;
922
 
<a name="l00996"></a>00996       next=next-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
923
 
<a name="l00997"></a>00997       <a class="code" href="classtree.html#fb19caa16588297c9674abb18c40a32a">erase</a>((<a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a>)orig_first);
 
918
<a name="l00996"></a>00996       next=next-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
 
919
<a name="l00997"></a>00997       <a class="code" href="classtree.html#3eb424c89446ae17a747d2aca2cdda4b" title="Erase element at position pointed to by iterator, return incremented iterator.">erase</a>((<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>)orig_first);
924
920
<a name="l00998"></a>00998       <span class="keywordflow">if</span>(last) 
925
921
<a name="l00999"></a>00999          <span class="keywordflow">break</span>;
926
922
<a name="l01000"></a>01000       orig_first=next;
930
926
<a name="l01004"></a>01004 
931
927
<a name="l01005"></a>01005 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
932
928
<a name="l01006"></a>01006 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> iter&gt;
933
 
<a name="l01007"></a><a class="code" href="classtree.html#aa9c55593a7d52cde352a3dde80fbaf9">01007</a> iter <a class="code" href="classtree.html#aa9c55593a7d52cde352a3dde80fbaf9">tree&lt;T, tree_node_allocator&gt;::flatten</a>(iter <a class="code" href="messages_8cpp.html#d4db2383832ddcfb93e4e02ce1cb102b">position</a>)
 
929
<a name="l01007"></a><a class="code" href="classtree.html#479c8e3f748608a9b9fb91e58e18998c">01007</a> iter <a class="code" href="classtree.html#479c8e3f748608a9b9fb91e58e18998c" title="Move all children of node at &amp;#39;position&amp;#39; to be siblings, returns position...">tree&lt;T, tree_node_allocator&gt;::flatten</a>(iter <a class="code" href="messages_8cpp.html#4da8008b6f110050513003edf67a2495">position</a>)
934
930
<a name="l01008"></a>01008    {
935
931
<a name="l01009"></a>01009    <span class="keywordflow">if</span>(position.node-&gt;first_child==0)
936
932
<a name="l01010"></a>01010       <span class="keywordflow">return</span> position;
937
933
<a name="l01011"></a>01011 
938
 
<a name="l01012"></a>01012    <a class="code" href="classtree__node__.html">tree_node</a> *tmp=position.node-&gt;first_child;
 
934
<a name="l01012"></a>01012    <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=position.node-&gt;first_child;
939
935
<a name="l01013"></a>01013    <span class="keywordflow">while</span>(tmp) {
940
 
<a name="l01014"></a>01014       tmp-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>=position.node-&gt;parent;
941
 
<a name="l01015"></a>01015       tmp=tmp-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
 
936
<a name="l01014"></a>01014       tmp-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>=position.node-&gt;parent;
 
937
<a name="l01015"></a>01015       tmp=tmp-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
942
938
<a name="l01016"></a>01016       } 
943
939
<a name="l01017"></a>01017    <span class="keywordflow">if</span>(position.node-&gt;next_sibling) {
944
940
<a name="l01018"></a>01018       position.node-&gt;last_child-&gt;next_sibling=position.node-&gt;next_sibling;
958
954
<a name="l01032"></a>01032 
959
955
<a name="l01033"></a>01033 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
960
956
<a name="l01034"></a>01034 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> iter&gt;
961
 
<a name="l01035"></a><a class="code" href="classtree.html#8b127e71944f9bd724c8398f948e9192">01035</a> iter <a class="code" href="classtree.html#8b127e71944f9bd724c8398f948e9192">tree&lt;T, tree_node_allocator&gt;::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 &amp;#39;position&amp;#39;.">tree&lt;T, tree_node_allocator&gt;::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-&gt;<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-&gt;<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-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>==0) {
972
 
<a name="l01046"></a>01046       first-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>-&gt;first_child=last-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
 
967
<a name="l01045"></a>01045    <span class="keywordflow">if</span>(first-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>==0) {
 
968
<a name="l01046"></a>01046       first-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>-&gt;first_child=last-&gt;<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-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>-&gt;next_sibling=last-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
 
971
<a name="l01049"></a>01049       first-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>-&gt;next_sibling=last-&gt;<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-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>==0) {
978
 
<a name="l01052"></a>01052       last-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>-&gt;last_child=first-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
 
973
<a name="l01051"></a>01051    <span class="keywordflow">if</span>(last-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>==0) {
 
974
<a name="l01052"></a>01052       last-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>-&gt;last_child=first-&gt;<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-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>-&gt;prev_sibling=first-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
 
977
<a name="l01055"></a>01055       last-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>-&gt;prev_sibling=first-&gt;<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-&gt;first_child==0) {
984
980
<a name="l01058"></a>01058       position.node-&gt;first_child=first;
985
 
<a name="l01059"></a>01059       position.node-&gt;<a class="code" href="classtree__node__.html#f8b222dacdcdf6ca9f24f7a410e36f20">last_child</a>=last;
986
 
<a name="l01060"></a>01060       first-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=0;
 
981
<a name="l01059"></a>01059       position.node-&gt;<a class="code" href="classtree__node__.html#611d3c41c716dae6bf2012e3d9152933">last_child</a>=last;
 
982
<a name="l01060"></a>01060       first-&gt;<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-&gt;last_child-&gt;next_sibling=first;
990
 
<a name="l01064"></a>01064       first-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=position.node-&gt;last_child;
 
986
<a name="l01064"></a>01064       first-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=position.node-&gt;last_child;
991
987
<a name="l01065"></a>01065       position.node-&gt;last_child=last;
992
988
<a name="l01066"></a>01066       }
993
 
<a name="l01067"></a>01067    last-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=0;
 
989
<a name="l01067"></a>01067    last-&gt;<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-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>=position.node;
 
993
<a name="l01071"></a>01071       pos-&gt;<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-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
 
995
<a name="l01073"></a>01073       pos=pos-&gt;<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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1006
 
<a name="l01080"></a><a class="code" href="classtree.html#bf241e0eb4ff50eda4f2f5220a86d728">01080</a> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> iter&gt; iter <a class="code" href="classtree.html#8b127e71944f9bd724c8398f948e9192">tree&lt;T, tree_node_allocator&gt;::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> &lt;<span class="keyword">typename</span> iter&gt; iter <a class="code" href="classtree.html#32b88523e2d5b6c78381b7da9455be5e" title="Move nodes in range to be children of &amp;#39;position&amp;#39;.">tree&lt;T, tree_node_allocator&gt;::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-&gt;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-&gt;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 &amp;#39;position&amp;#39;.">reparent</a>(position, from.node-&gt;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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1013
 
<a name="l01087"></a><a class="code" href="classtree.html#f4f74176002736b5ad91d07e37954e18">01087</a> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> iter&gt; iter <a class="code" href="classtree.html#f4f74176002736b5ad91d07e37954e18">tree&lt;T, tree_node_allocator&gt;::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> &lt;<span class="keyword">typename</span> iter&gt; iter <a class="code" href="classtree.html#e7f72ba46cd061f71720c731b4a9bf63" title="Move &amp;#39;source&amp;#39; node (plus its children) to become the next sibling of &amp;#39;target&amp;#39;...">tree&lt;T, tree_node_allocator&gt;::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-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>!=0) src-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>-&gt;next_sibling=src-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
1024
 
<a name="l01098"></a>01098    <span class="keywordflow">else</span>                     src-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>-&gt;first_child=src-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
1025
 
<a name="l01099"></a>01099    <span class="keywordflow">if</span>(src-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>!=0) src-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>-&gt;prev_sibling=src-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
1026
 
<a name="l01100"></a>01100    <span class="keywordflow">else</span>                     src-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>-&gt;last_child=src-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
 
1019
<a name="l01097"></a>01097    <span class="keywordflow">if</span>(src-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>!=0) src-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>-&gt;next_sibling=src-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
 
1020
<a name="l01098"></a>01098    <span class="keywordflow">else</span>                     src-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>-&gt;first_child=src-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
 
1021
<a name="l01099"></a>01099    <span class="keywordflow">if</span>(src-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>!=0) src-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>-&gt;prev_sibling=src-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
 
1022
<a name="l01100"></a>01100    <span class="keywordflow">else</span>                     src-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>-&gt;last_child=src-&gt;<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-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>!=0) dst-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>-&gt;prev_sibling=src;
1030
 
<a name="l01104"></a>01104    <span class="keywordflow">else</span>                     dst-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>-&gt;last_child=src;
1031
 
<a name="l01105"></a>01105    src-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=dst-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
1032
 
<a name="l01106"></a>01106    dst-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=src;
1033
 
<a name="l01107"></a>01107    src-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=dst;
1034
 
<a name="l01108"></a>01108    src-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>=dst-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>;
 
1025
<a name="l01103"></a>01103    <span class="keywordflow">if</span>(dst-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>!=0) dst-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>-&gt;prev_sibling=src;
 
1026
<a name="l01104"></a>01104    <span class="keywordflow">else</span>                     dst-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>-&gt;last_child=src;
 
1027
<a name="l01105"></a>01105    src-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=dst-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
 
1028
<a name="l01106"></a>01106    dst-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=src;
 
1029
<a name="l01107"></a>01107    src-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=dst;
 
1030
<a name="l01108"></a>01108    src-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>=dst-&gt;<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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1040
 
<a name="l01114"></a><a class="code" href="classtree.html#0298006c1f5106ec81657fc1fc9d1cc3">01114</a> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> iter&gt; iter <a class="code" href="classtree.html#0298006c1f5106ec81657fc1fc9d1cc3">tree&lt;T, tree_node_allocator&gt;::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> &lt;<span class="keyword">typename</span> iter&gt; iter <a class="code" href="classtree.html#b45aa15042445a81b13873d3ef4a2e86" title="Move &amp;#39;source&amp;#39; node (plus its children) to become the previous sibling of...">tree&lt;T, tree_node_allocator&gt;::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-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>!=0) src-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>-&gt;next_sibling=src-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
1051
 
<a name="l01125"></a>01125    <span class="keywordflow">else</span>                     src-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>-&gt;first_child=src-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
1052
 
<a name="l01126"></a>01126    <span class="keywordflow">if</span>(src-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>!=0) src-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>-&gt;prev_sibling=src-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
1053
 
<a name="l01127"></a>01127    <span class="keywordflow">else</span>                     src-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>-&gt;last_child=src-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
 
1046
<a name="l01124"></a>01124    <span class="keywordflow">if</span>(src-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>!=0) src-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>-&gt;next_sibling=src-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
 
1047
<a name="l01125"></a>01125    <span class="keywordflow">else</span>                     src-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>-&gt;first_child=src-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
 
1048
<a name="l01126"></a>01126    <span class="keywordflow">if</span>(src-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>!=0) src-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>-&gt;prev_sibling=src-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
 
1049
<a name="l01127"></a>01127    <span class="keywordflow">else</span>                     src-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>-&gt;last_child=src-&gt;<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-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>!=0) dst-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>-&gt;next_sibling=src;
1057
 
<a name="l01131"></a>01131    <span class="keywordflow">else</span>                     dst-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>-&gt;first_child=src;
1058
 
<a name="l01132"></a>01132    src-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=dst-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
1059
 
<a name="l01133"></a>01133    dst-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=src;
1060
 
<a name="l01134"></a>01134    src-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=dst;
1061
 
<a name="l01135"></a>01135    src-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>=dst-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>;
 
1052
<a name="l01130"></a>01130    <span class="keywordflow">if</span>(dst-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>!=0) dst-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>-&gt;next_sibling=src;
 
1053
<a name="l01131"></a>01131    <span class="keywordflow">else</span>                     dst-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>-&gt;first_child=src;
 
1054
<a name="l01132"></a>01132    src-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=dst-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
 
1055
<a name="l01133"></a>01133    dst-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=src;
 
1056
<a name="l01134"></a>01134    src-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=dst;
 
1057
<a name="l01135"></a>01135    src-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>=dst-&gt;<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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1066
 
<a name="l01140"></a><a class="code" href="classtree.html#8c1f99b308550e6eaa1e3ff7932dd7c3">01140</a> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> iter&gt; iter <a class="code" href="classtree.html#8c1f99b308550e6eaa1e3ff7932dd7c3">tree&lt;T, tree_node_allocator&gt;::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> &lt;<span class="keyword">typename</span> iter&gt; iter <a class="code" href="classtree.html#a4f8b906b2758eec530e28387b819284" title="Move &amp;#39;source&amp;#39; node (plus its children) to become the node at &amp;#39;target&amp;#39;...">tree&lt;T, tree_node_allocator&gt;::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-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>!=0) src-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>-&gt;next_sibling=src-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
1085
 
<a name="l01159"></a>01159    <span class="keywordflow">else</span>                     src-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>-&gt;first_child=src-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
1086
 
<a name="l01160"></a>01160    <span class="keywordflow">if</span>(src-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>!=0) src-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>-&gt;prev_sibling=src-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
1087
 
<a name="l01161"></a>01161    <span class="keywordflow">else</span>                     src-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>-&gt;last_child=src-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>;
 
1080
<a name="l01158"></a>01158    <span class="keywordflow">if</span>(src-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>!=0) src-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>-&gt;next_sibling=src-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
 
1081
<a name="l01159"></a>01159    <span class="keywordflow">else</span>                     src-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>-&gt;first_child=src-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
 
1082
<a name="l01160"></a>01160    <span class="keywordflow">if</span>(src-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>!=0) src-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>-&gt;prev_sibling=src-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
 
1083
<a name="l01161"></a>01161    <span class="keywordflow">else</span>                     src-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>-&gt;last_child=src-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<a class="code" href="classtree__node__.html#f8b222dacdcdf6ca9f24f7a410e36f20">last_child</a>=src;
1094
 
<a name="l01168"></a>01168    src-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=b_prev_sibling;
1095
 
<a name="l01169"></a>01169    src-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=b_next_sibling;
1096
 
<a name="l01170"></a>01170    src-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<a class="code" href="classtree__node__.html#611d3c41c716dae6bf2012e3d9152933">last_child</a>=src;
 
1090
<a name="l01168"></a>01168    src-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=b_prev_sibling;
 
1091
<a name="l01169"></a>01169    src-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=b_next_sibling;
 
1092
<a name="l01170"></a>01170    src-&gt;<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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
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&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::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       }
1122
1118
<a name="l01196"></a>01196 
1123
1119
<a name="l01197"></a>01197 
1124
1120
<a name="l01198"></a>01198 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1125
 
<a name="l01199"></a><a class="code" href="classtree.html#d2a8822b04bc1b48da62adf35f1f2b7e">01199</a> <span class="keywordtype">void</span> <a class="code" href="classtree.html#d2a8822b04bc1b48da62adf35f1f2b7e">tree&lt;T, tree_node_allocator&gt;::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)
 
1121
<a name="l01199"></a><a class="code" href="classtree.html#498ec42a5eb44cba8bf9ef6e7fd5db9e">01199</a> <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).">tree&lt;T, tree_node_allocator&gt;::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)
1126
1122
<a name="l01200"></a>01200    {
1127
1123
<a name="l01201"></a>01201    std::less&lt;T&gt; comp;
1128
 
<a name="l01202"></a>01202    <a class="code" href="classtree.html#d2a8822b04bc1b48da62adf35f1f2b7e">sort</a>(from, to, comp, deep);
 
1124
<a name="l01202"></a>01202    <a class="code" href="classtree.html#498ec42a5eb44cba8bf9ef6e7fd5db9e" title="Sort (std::sort only moves values of nodes, this one moves children as well).">sort</a>(from, to, comp, deep);
1129
1125
<a name="l01203"></a>01203    }
1130
1126
<a name="l01204"></a>01204 
1131
1127
<a name="l01205"></a>01205 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1132
1128
<a name="l01206"></a>01206 <span class="keyword">template</span> &lt;<span class="keyword">class</span> StrictWeakOrdering&gt;
1133
 
<a name="l01207"></a><a class="code" href="classtree.html#2ef3d733ac457021985aa6ccfc12bad4">01207</a> <span class="keywordtype">void</span> <a class="code" href="classtree.html#d2a8822b04bc1b48da62adf35f1f2b7e">tree&lt;T, tree_node_allocator&gt;::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, 
 
1129
<a name="l01207"></a><a class="code" href="classtree.html#f187f42c28a39304649ee41d3464f2ef">01207</a> <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).">tree&lt;T, tree_node_allocator&gt;::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, 
1134
1130
<a name="l01208"></a>01208                                         StrictWeakOrdering comp, <span class="keywordtype">bool</span> deep)
1135
1131
<a name="l01209"></a>01209    {
1136
1132
<a name="l01210"></a>01210    <span class="keywordflow">if</span>(from==to) <span class="keywordflow">return</span>;
1138
1134
<a name="l01212"></a>01212    <span class="comment">// CHECK: if multiset stores equivalent nodes in the order in which they</span>
1139
1135
<a name="l01213"></a>01213    <span class="comment">// are inserted, then this routine should be called 'stable_sort'.</span>
1140
1136
<a name="l01214"></a>01214    std::multiset&lt;tree_node *, compare_nodes&lt;StrictWeakOrdering&gt; &gt; nodes(comp);
1141
 
<a name="l01215"></a>01215    <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> it=from, it2=to;
 
1137
<a name="l01215"></a>01215    <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=from, it2=to;
1142
1138
<a name="l01216"></a>01216    <span class="keywordflow">while</span>(it != to) {
1143
 
<a name="l01217"></a>01217       nodes.insert(it.node);
 
1139
<a name="l01217"></a>01217       nodes.insert(it.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>);
1144
1140
<a name="l01218"></a>01218       ++it;
1145
1141
<a name="l01219"></a>01219       }
1146
1142
<a name="l01220"></a>01220    <span class="comment">// reassemble</span>
1147
1143
<a name="l01221"></a>01221    --it2;
1148
1144
<a name="l01222"></a>01222 
1149
1145
<a name="l01223"></a>01223    <span class="comment">// prev and next are the nodes before and after the sorted range</span>
1150
 
<a name="l01224"></a>01224    <a class="code" href="classtree__node__.html">tree_node</a> *prev=from.node-&gt;prev_sibling;
1151
 
<a name="l01225"></a>01225    <a class="code" href="classtree__node__.html">tree_node</a> *next=it2.node-&gt;next_sibling;
1152
 
<a name="l01226"></a>01226    <span class="keyword">typename</span> std::multiset&lt;tree_node *, compare_nodes&lt;StrictWeakOrdering&gt; &gt;<a class="code" href="classtree_1_1pre__order__iterator.html">::iterator</a> nit=nodes.begin(), eit=nodes.end();
 
1146
<a name="l01224"></a>01224    <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> *prev=from.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
 
1147
<a name="l01225"></a>01225    <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> *next=it2.node-&gt;next_sibling;
 
1148
<a name="l01226"></a>01226    <span class="keyword">typename</span> std::multiset&lt;tree_node *, compare_nodes&lt;StrictWeakOrdering&gt; &gt;<a class="code" href="classtree_1_1pre__order__iterator.html" title="Depth-first iterator, first accessing the node, then its children.">::iterator</a> nit=nodes.begin(), eit=nodes.end();
1153
1149
<a name="l01227"></a>01227    <span class="keywordflow">if</span>(prev==0) {
1154
1150
<a name="l01228"></a>01228       <span class="keywordflow">if</span>((*nit)-&gt;parent!=0) <span class="comment">// to catch "sorting the head" situations, when there is no parent</span>
1155
1151
<a name="l01229"></a>01229          (*nit)-&gt;parent-&gt;first_child=(*nit);
1156
1152
<a name="l01230"></a>01230       }
1157
 
<a name="l01231"></a>01231    <span class="keywordflow">else</span> prev-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=(*nit);
 
1153
<a name="l01231"></a>01231    <span class="keywordflow">else</span> prev-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=(*nit);
1158
1154
<a name="l01232"></a>01232 
1159
1155
<a name="l01233"></a>01233    --eit;
1160
1156
<a name="l01234"></a>01234    <span class="keywordflow">while</span>(nit!=eit) {
1161
1157
<a name="l01235"></a>01235       (*nit)-&gt;prev_sibling=prev;
1162
1158
<a name="l01236"></a>01236       <span class="keywordflow">if</span>(prev)
1163
 
<a name="l01237"></a>01237          prev-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=(*nit);
 
1159
<a name="l01237"></a>01237          prev-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=(*nit);
1164
1160
<a name="l01238"></a>01238       prev=(*nit);
1165
1161
<a name="l01239"></a>01239       ++nit;
1166
1162
<a name="l01240"></a>01240       }
1167
1163
<a name="l01241"></a>01241    <span class="comment">// prev now points to the last-but-one node in the sorted range</span>
1168
1164
<a name="l01242"></a>01242    <span class="keywordflow">if</span>(prev)
1169
 
<a name="l01243"></a>01243       prev-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=(*eit);
 
1165
<a name="l01243"></a>01243       prev-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=(*eit);
1170
1166
<a name="l01244"></a>01244 
1171
1167
<a name="l01245"></a>01245    <span class="comment">// eit points to the last node in the sorted range.</span>
1172
1168
<a name="l01246"></a>01246    (*eit)-&gt;next_sibling=next;
1173
 
<a name="l01247"></a>01247    (*eit)-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=prev; <span class="comment">// missed in the loop above</span>
 
1169
<a name="l01247"></a>01247    (*eit)-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=prev; <span class="comment">// missed in the loop above</span>
1174
1170
<a name="l01248"></a>01248    <span class="keywordflow">if</span>(next==0) {
1175
1171
<a name="l01249"></a>01249       <span class="keywordflow">if</span>((*eit)-&gt;parent!=0) <span class="comment">// to catch "sorting the head" situations, when there is no parent</span>
1176
 
<a name="l01250"></a>01250          (*eit)-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>-&gt;last_child=(*eit);
 
1172
<a name="l01250"></a>01250          (*eit)-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>-&gt;last_child=(*eit);
1177
1173
<a name="l01251"></a>01251       }
1178
 
<a name="l01252"></a>01252    <span class="keywordflow">else</span> next-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=(*eit);
 
1174
<a name="l01252"></a>01252    <span class="keywordflow">else</span> next-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=(*eit);
1179
1175
<a name="l01253"></a>01253 
1180
1176
<a name="l01254"></a>01254    <span class="keywordflow">if</span>(deep) {  <span class="comment">// sort the children of each node too</span>
1181
 
<a name="l01255"></a>01255       <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> bcs(*nodes.begin());
1182
 
<a name="l01256"></a>01256       <a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> ecs(*eit);
 
1177
<a name="l01255"></a>01255       <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> bcs(*nodes.begin());
 
1178
<a name="l01256"></a>01256       <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> ecs(*eit);
1183
1179
<a name="l01257"></a>01257       ++ecs;
1184
1180
<a name="l01258"></a>01258       <span class="keywordflow">while</span>(bcs!=ecs) {
1185
 
<a name="l01259"></a>01259          <a class="code" href="classtree.html#d2a8822b04bc1b48da62adf35f1f2b7e">sort</a>(<a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">begin</a>(bcs), <a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">end</a>(bcs), comp, deep);
 
1181
<a name="l01259"></a>01259          <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.html#76b3a629c0208d5ae5b4ffcd4492e05e" title="Return iterator to the beginning of the tree.">begin</a>(bcs), <a class="code" href="classtree.html#0d09fe9fd34fbfc9c9e4e28cb694448e" title="Return iterator to the end of the tree.">end</a>(bcs), comp, deep);
1186
1182
<a name="l01260"></a>01260          ++bcs;
1187
1183
<a name="l01261"></a>01261          }
1188
1184
<a name="l01262"></a>01262       }
1190
1186
<a name="l01264"></a>01264 
1191
1187
<a name="l01265"></a>01265 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1192
1188
<a name="l01266"></a>01266 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> iter&gt;
1193
 
<a name="l01267"></a><a class="code" href="classtree.html#4fee29597a52bb5d7c80d1d38abe7952">01267</a> <span class="keywordtype">bool</span> <a class="code" href="classtree.html#4fee29597a52bb5d7c80d1d38abe7952">tree&lt;T, tree_node_allocator&gt;::equal</a>(<span class="keyword">const</span> iter&amp; one_, <span class="keyword">const</span> iter&amp; two, <span class="keyword">const</span> iter&amp; three_)<span class="keyword"> const</span>
 
1189
<a name="l01267"></a><a class="code" href="classtree.html#59488f63fc6ad997809d971c48ecfc04">01267</a> <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).">tree&lt;T, tree_node_allocator&gt;::equal</a>(<span class="keyword">const</span> iter&amp; one_, <span class="keyword">const</span> iter&amp; two, <span class="keyword">const</span> iter&amp; three_)<span class="keyword"> const</span>
1194
1190
<a name="l01268"></a>01268 <span class="keyword">   </span>{
1195
1191
<a name="l01269"></a>01269    std::equal_to&lt;T&gt; comp;
1196
 
<a name="l01270"></a>01270    <span class="keywordflow">return</span> <a class="code" href="classtree.html#4fee29597a52bb5d7c80d1d38abe7952">equal</a>(one_, two, three_, comp);
 
1192
<a name="l01270"></a>01270    <span class="keywordflow">return</span> <a class="code" href="classtree.html#59488f63fc6ad997809d971c48ecfc04" title="Compare two ranges of nodes (compares nodes as well as tree structure).">equal</a>(one_, two, three_, comp);
1197
1193
<a name="l01271"></a>01271    }
1198
1194
<a name="l01272"></a>01272 
1199
1195
<a name="l01273"></a>01273 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1200
1196
<a name="l01274"></a>01274 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> iter&gt;
1201
 
<a name="l01275"></a><a class="code" href="classtree.html#c8ed9b1eda534a67881553c59cc8cc9d">01275</a> <span class="keywordtype">bool</span> <a class="code" href="classtree.html#c8ed9b1eda534a67881553c59cc8cc9d">tree&lt;T, tree_node_allocator&gt;::equal_subtree</a>(<span class="keyword">const</span> iter&amp; one_, <span class="keyword">const</span> iter&amp; two_)<span class="keyword"> const</span>
 
1197
<a name="l01275"></a><a class="code" href="classtree.html#6e2e76dfa6f0f51ca6f573d73b0c1b28">01275</a> <span class="keywordtype">bool</span> <a class="code" href="classtree.html#6e2e76dfa6f0f51ca6f573d73b0c1b28">tree&lt;T, tree_node_allocator&gt;::equal_subtree</a>(<span class="keyword">const</span> iter&amp; one_, <span class="keyword">const</span> iter&amp; two_)<span class="keyword"> const</span>
1202
1198
<a name="l01276"></a>01276 <span class="keyword">   </span>{
1203
1199
<a name="l01277"></a>01277    std::equal_to&lt;T&gt; comp;
1204
 
<a name="l01278"></a>01278    <span class="keywordflow">return</span> <a class="code" href="classtree.html#c8ed9b1eda534a67881553c59cc8cc9d">equal_subtree</a>(one_, two_, comp);
 
1200
<a name="l01278"></a>01278    <span class="keywordflow">return</span> <a class="code" href="classtree.html#6e2e76dfa6f0f51ca6f573d73b0c1b28">equal_subtree</a>(one_, two_, comp);
1205
1201
<a name="l01279"></a>01279    }
1206
1202
<a name="l01280"></a>01280 
1207
1203
<a name="l01281"></a>01281 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1208
1204
<a name="l01282"></a>01282 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> iter, <span class="keyword">class</span> BinaryPredicate&gt;
1209
 
<a name="l01283"></a><a class="code" href="classtree.html#b94a0875a622596e7e624f250117e9e4">01283</a> <span class="keywordtype">bool</span> <a class="code" href="classtree.html#4fee29597a52bb5d7c80d1d38abe7952">tree&lt;T, tree_node_allocator&gt;::equal</a>(<span class="keyword">const</span> iter&amp; one_, <span class="keyword">const</span> iter&amp; two, <span class="keyword">const</span> iter&amp; three_, BinaryPredicate fun)<span class="keyword"> const</span>
 
1205
<a name="l01283"></a><a class="code" href="classtree.html#7ce7ff12a68be494b28925b2f7184a29">01283</a> <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).">tree&lt;T, tree_node_allocator&gt;::equal</a>(<span class="keyword">const</span> iter&amp; one_, <span class="keyword">const</span> iter&amp; two, <span class="keyword">const</span> iter&amp; three_, BinaryPredicate fun)<span class="keyword"> const</span>
1210
1206
<a name="l01284"></a>01284 <span class="keyword">   </span>{
1211
 
<a name="l01285"></a>01285    <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a> one(one_), three(three_);
 
1207
<a name="l01285"></a>01285    <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> one(one_), three(three_);
1212
1208
<a name="l01286"></a>01286 
1213
1209
<a name="l01287"></a>01287 <span class="comment">// if(one==two &amp;&amp; is_valid(three) &amp;&amp; three.number_of_children()!=0)</span>
1214
1210
<a name="l01288"></a>01288 <span class="comment">//    return false;</span>
1215
 
<a name="l01289"></a>01289    <span class="keywordflow">while</span>(one!=two &amp;&amp; <a class="code" href="classtree.html#701009e4869f78144556ebc4ce33750f">is_valid</a>(three)) {
 
1211
<a name="l01289"></a>01289    <span class="keywordflow">while</span>(one!=two &amp;&amp; <a class="code" href="classtree.html#9605b028195248894dc8cf506cd256e3" title="Determine whether the iterator is an &amp;#39;end&amp;#39; iterator and thus not actually...">is_valid</a>(three)) {
1216
1212
<a name="l01290"></a>01290       <span class="keywordflow">if</span>(!fun(*one,*three))
1217
1213
<a name="l01291"></a>01291          <span class="keywordflow">return</span> <span class="keyword">false</span>;
1218
 
<a name="l01292"></a>01292       <span class="keywordflow">if</span>(one.number_of_children()!=three.number_of_children()) 
 
1214
<a name="l01292"></a>01292       <span class="keywordflow">if</span>(one.number_of_children()!=three.<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>()) 
1219
1215
<a name="l01293"></a>01293          <span class="keywordflow">return</span> <span class="keyword">false</span>;
1220
1216
<a name="l01294"></a>01294       ++one;
1221
1217
<a name="l01295"></a>01295       ++three;
1225
1221
<a name="l01299"></a>01299 
1226
1222
<a name="l01300"></a>01300 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1227
1223
<a name="l01301"></a>01301 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> iter, <span class="keyword">class</span> BinaryPredicate&gt;
1228
 
<a name="l01302"></a><a class="code" href="classtree.html#728582159c3d6b9b2a4890e95034a6d5">01302</a> <span class="keywordtype">bool</span> <a class="code" href="classtree.html#c8ed9b1eda534a67881553c59cc8cc9d">tree&lt;T, tree_node_allocator&gt;::equal_subtree</a>(<span class="keyword">const</span> iter&amp; one_, <span class="keyword">const</span> iter&amp; two_, BinaryPredicate fun)<span class="keyword"> const</span>
 
1224
<a name="l01302"></a><a class="code" href="classtree.html#5e8445150c43058416d16b4846ff0f15">01302</a> <span class="keywordtype">bool</span> <a class="code" href="classtree.html#6e2e76dfa6f0f51ca6f573d73b0c1b28">tree&lt;T, tree_node_allocator&gt;::equal_subtree</a>(<span class="keyword">const</span> iter&amp; one_, <span class="keyword">const</span> iter&amp; two_, BinaryPredicate fun)<span class="keyword"> const</span>
1229
1225
<a name="l01303"></a>01303 <span class="keyword">   </span>{
1230
 
<a name="l01304"></a>01304    <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a> one(one_), two(two_);
 
1226
<a name="l01304"></a>01304    <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> one(one_), two(two_);
1231
1227
<a name="l01305"></a>01305 
1232
1228
<a name="l01306"></a>01306    <span class="keywordflow">if</span>(!fun(*one,*two)) <span class="keywordflow">return</span> <span class="keyword">false</span>;
1233
 
<a name="l01307"></a>01307    <span class="keywordflow">if</span>(<a class="code" href="classtree.html#9e33e1e03c74f7fd67d0c8ab1b014f70">number_of_children</a>(one)!=<a class="code" href="classtree.html#9e33e1e03c74f7fd67d0c8ab1b014f70">number_of_children</a>(two)) <span class="keywordflow">return</span> <span class="keyword">false</span>;
1234
 
<a name="l01308"></a>01308    <span class="keywordflow">return</span> <a class="code" href="classtree.html#4fee29597a52bb5d7c80d1d38abe7952">equal</a>(<a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">begin</a>(one),<a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">end</a>(one),<a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">begin</a>(two),fun);
 
1229
<a name="l01307"></a>01307    <span class="keywordflow">if</span>(<a class="code" href="classtree.html#96f82a90a3e21e82f486f325b0cf9faa" title="Count the number of children of node at position.">number_of_children</a>(one)!=<a class="code" href="classtree.html#96f82a90a3e21e82f486f325b0cf9faa" title="Count the number of children of node at position.">number_of_children</a>(two)) <span class="keywordflow">return</span> <span class="keyword">false</span>;
 
1230
<a name="l01308"></a>01308    <span class="keywordflow">return</span> <a class="code" href="classtree.html#59488f63fc6ad997809d971c48ecfc04" title="Compare two ranges of nodes (compares nodes as well as tree structure).">equal</a>(<a class="code" href="classtree.html#76b3a629c0208d5ae5b4ffcd4492e05e" title="Return iterator to the beginning of the tree.">begin</a>(one),<a class="code" href="classtree.html#0d09fe9fd34fbfc9c9e4e28cb694448e" title="Return iterator to the end of the tree.">end</a>(one),<a class="code" href="classtree.html#76b3a629c0208d5ae5b4ffcd4492e05e" title="Return iterator to the beginning of the tree.">begin</a>(two),fun);
1235
1231
<a name="l01309"></a>01309    }
1236
1232
<a name="l01310"></a>01310 
1237
1233
<a name="l01311"></a>01311 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1238
 
<a name="l01312"></a><a class="code" href="classtree.html#e0c63efd151b313a372d01f2dae19c0d">01312</a> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;</a> <a class="code" href="classtree.html#e0c63efd151b313a372d01f2dae19c0d">tree&lt;T, tree_node_allocator&gt;::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>
 
1234
<a name="l01312"></a><a class="code" href="classtree.html#db61bebed6c56eb5641b0b7fab7fe625">01312</a> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;</a> <a class="code" href="classtree.html#db61bebed6c56eb5641b0b7fab7fe625" title="Extract a new tree formed by the range of siblings plus all their children.">tree&lt;T, tree_node_allocator&gt;::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>
1239
1235
<a name="l01313"></a>01313 <span class="keyword">   </span>{
1240
1236
<a name="l01314"></a>01314    <a class="code" href="classtree.html">tree</a> tmp;
1241
 
<a name="l01315"></a>01315    tmp.<a class="code" href="classtree.html#e6749fed3d80f2b74bb6319c4eb2af73">set_head</a>(<a class="code" href="classtree.html#6e12b3e8e7e08b824ea27a9ca7fa49da">value_type</a>());
1242
 
<a name="l01316"></a>01316    tmp.<a class="code" href="classtree.html#3839ca59210cc5171bc768552cc82dbe">replace</a>(tmp.<a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">begin</a>(), tmp.<a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">end</a>(), from, to);
 
1237
<a name="l01315"></a>01315    tmp.<a class="code" href="classtree.html#f11d736ea971ab93651350161f5a7535" title="Short-hand to insert topmost node in otherwise empty tree.">set_head</a>(<a class="code" href="classtree.html#1e7bcd21e7420f7922a1bca79080acfa" title="Value of the data stored at a node.">value_type</a>());
 
1238
<a name="l01316"></a>01316    tmp.<a class="code" href="classtree.html#4885e968c82655ebebea5d0927b7e9f4" title="Replace node at &amp;#39;position&amp;#39; with other node (keeping same children); &amp;#39;position&amp;#39;...">replace</a>(tmp.<a class="code" href="classtree.html#76b3a629c0208d5ae5b4ffcd4492e05e" title="Return iterator to the beginning of the tree.">begin</a>(), tmp.<a class="code" href="classtree.html#0d09fe9fd34fbfc9c9e4e28cb694448e" title="Return iterator to the end of the tree.">end</a>(), from, to);
1243
1239
<a name="l01317"></a>01317    <span class="keywordflow">return</span> tmp;
1244
1240
<a name="l01318"></a>01318    }
1245
1241
<a name="l01319"></a>01319 
1246
1242
<a name="l01320"></a>01320 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1247
 
<a name="l01321"></a><a class="code" href="classtree.html#f2e644887f62d410ff310c7d73721f3e">01321</a> <span class="keywordtype">void</span> <a class="code" href="classtree.html#e0c63efd151b313a372d01f2dae19c0d">tree&lt;T, tree_node_allocator&gt;::subtree</a>(<a class="code" href="classtree.html">tree</a>&amp; tmp, <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>
 
1243
<a name="l01321"></a><a class="code" href="classtree.html#830cccac50df183c44c6ff83cab5a27f">01321</a> <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.">tree&lt;T, tree_node_allocator&gt;::subtree</a>(<a class="code" href="classtree.html">tree</a>&amp; tmp, <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>
1248
1244
<a name="l01322"></a>01322 <span class="keyword">   </span>{
1249
 
<a name="l01323"></a>01323    tmp.<a class="code" href="classtree.html#e6749fed3d80f2b74bb6319c4eb2af73">set_head</a>(<a class="code" href="classtree.html#6e12b3e8e7e08b824ea27a9ca7fa49da">value_type</a>());
1250
 
<a name="l01324"></a>01324    tmp.<a class="code" href="classtree.html#3839ca59210cc5171bc768552cc82dbe">replace</a>(tmp.<a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">begin</a>(), tmp.<a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">end</a>(), from, to);
 
1245
<a name="l01323"></a>01323    tmp.<a class="code" href="classtree.html#f11d736ea971ab93651350161f5a7535" title="Short-hand to insert topmost node in otherwise empty tree.">set_head</a>(<a class="code" href="classtree.html#1e7bcd21e7420f7922a1bca79080acfa" title="Value of the data stored at a node.">value_type</a>());
 
1246
<a name="l01324"></a>01324    tmp.<a class="code" href="classtree.html#4885e968c82655ebebea5d0927b7e9f4" title="Replace node at &amp;#39;position&amp;#39; with other node (keeping same children); &amp;#39;position&amp;#39;...">replace</a>(tmp.<a class="code" href="classtree.html#76b3a629c0208d5ae5b4ffcd4492e05e" title="Return iterator to the beginning of the tree.">begin</a>(), tmp.<a class="code" href="classtree.html#0d09fe9fd34fbfc9c9e4e28cb694448e" title="Return iterator to the end of the tree.">end</a>(), from, to);
1251
1247
<a name="l01325"></a>01325    }
1252
1248
<a name="l01326"></a>01326 
1253
1249
<a name="l01327"></a>01327 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1254
 
<a name="l01328"></a><a class="code" href="classtree.html#153ad4a2483c86e5f3647f131629400b">01328</a> <span class="keywordtype">int</span> <a class="code" href="classtree.html#153ad4a2483c86e5f3647f131629400b">tree&lt;T, tree_node_allocator&gt;::size</a>()<span class="keyword"> const</span>
 
1250
<a name="l01328"></a><a class="code" href="classtree.html#219ff1bfc99f78fd9a2db71f41891523">01328</a> <span class="keywordtype">int</span> <a class="code" href="classtree.html#219ff1bfc99f78fd9a2db71f41891523" title="Count the total number of nodes.">tree&lt;T, tree_node_allocator&gt;::size</a>()<span class="keyword"> const</span>
1255
1251
<a name="l01329"></a>01329 <span class="keyword">   </span>{
1256
1252
<a name="l01330"></a>01330    <span class="keywordtype">int</span> i=0;
1257
 
<a name="l01331"></a>01331    <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a> it=<a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">begin</a>(), eit=<a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">end</a>();
 
1253
<a name="l01331"></a>01331    <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> it=<a class="code" href="classtree.html#76b3a629c0208d5ae5b4ffcd4492e05e" title="Return iterator to the beginning of the tree.">begin</a>(), eit=<a class="code" href="classtree.html#0d09fe9fd34fbfc9c9e4e28cb694448e" title="Return iterator to the end of the tree.">end</a>();
1258
1254
<a name="l01332"></a>01332    <span class="keywordflow">while</span>(it!=eit) {
1259
1255
<a name="l01333"></a>01333       ++i;
1260
1256
<a name="l01334"></a>01334       ++it;
1263
1259
<a name="l01337"></a>01337    }
1264
1260
<a name="l01338"></a>01338 
1265
1261
<a name="l01339"></a>01339 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1266
 
<a name="l01340"></a><a class="code" href="classtree.html#04cf6fc4add8819a389dcf7e107ad2bf">01340</a> <span class="keywordtype">bool</span> <a class="code" href="classtree.html#04cf6fc4add8819a389dcf7e107ad2bf">tree&lt;T, tree_node_allocator&gt;::empty</a>()<span class="keyword"> const</span>
 
1262
<a name="l01340"></a><a class="code" href="classtree.html#e9f7fd30c51443d46ca8941d5bc06da2">01340</a> <span class="keywordtype">bool</span> <a class="code" href="classtree.html#e9f7fd30c51443d46ca8941d5bc06da2" title="Check if tree is empty.">tree&lt;T, tree_node_allocator&gt;::empty</a>()<span class="keyword"> const</span>
1267
1263
<a name="l01341"></a>01341 <span class="keyword">   </span>{
1268
 
<a name="l01342"></a>01342    <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a> it=<a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">begin</a>(), eit=<a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">end</a>();
 
1264
<a name="l01342"></a>01342    <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> it=<a class="code" href="classtree.html#76b3a629c0208d5ae5b4ffcd4492e05e" title="Return iterator to the beginning of the tree.">begin</a>(), eit=<a class="code" href="classtree.html#0d09fe9fd34fbfc9c9e4e28cb694448e" title="Return iterator to the end of the tree.">end</a>();
1269
1265
<a name="l01343"></a>01343    <span class="keywordflow">return</span> (it==eit);
1270
1266
<a name="l01344"></a>01344    }
1271
1267
<a name="l01345"></a>01345 
1272
1268
<a name="l01346"></a>01346 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1273
 
<a name="l01347"></a><a class="code" href="classtree.html#464267273fcfac957e31e28937cf996b">01347</a> <span class="keywordtype">int</span> <a class="code" href="classtree.html#464267273fcfac957e31e28937cf996b">tree&lt;T, tree_node_allocator&gt;::depth</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&amp; it)<span class="keyword"> const</span>
 
1269
<a name="l01347"></a><a class="code" href="classtree.html#16c66be75ca89c999a9c4a68497b05a1">01347</a> <span class="keywordtype">int</span> <a class="code" href="classtree.html#16c66be75ca89c999a9c4a68497b05a1" title="Compute the depth to the root.">tree&lt;T, tree_node_allocator&gt;::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>&amp; it)<span class="keyword"> const</span>
1274
1270
<a name="l01348"></a>01348 <span class="keyword">   </span>{
1275
 
<a name="l01349"></a>01349    <a class="code" href="classtree__node__.html">tree_node</a>* pos=it.node;
 
1271
<a name="l01349"></a>01349    <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=it.node;
1276
1272
<a name="l01350"></a>01350    assert(pos!=0);
1277
1273
<a name="l01351"></a>01351    <span class="keywordtype">int</span> ret=0;
1278
 
<a name="l01352"></a>01352    <span class="keywordflow">while</span>(pos-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>!=0) {
1279
 
<a name="l01353"></a>01353       pos=pos-&gt;<a class="code" href="classtree__node__.html#bcaaa94a4e6fc6223e89be4f5b9276d9">parent</a>;
 
1274
<a name="l01352"></a>01352    <span class="keywordflow">while</span>(pos-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>!=0) {
 
1275
<a name="l01353"></a>01353       pos=pos-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>;
1280
1276
<a name="l01354"></a>01354       ++ret;
1281
1277
<a name="l01355"></a>01355       }
1282
1278
<a name="l01356"></a>01356    <span class="keywordflow">return</span> ret;
1283
1279
<a name="l01357"></a>01357    }
1284
1280
<a name="l01358"></a>01358 
1285
1281
<a name="l01359"></a>01359 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1286
 
<a name="l01360"></a><a class="code" href="classtree.html#9e33e1e03c74f7fd67d0c8ab1b014f70">01360</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classtree.html#9e33e1e03c74f7fd67d0c8ab1b014f70">tree&lt;T, tree_node_allocator&gt;::number_of_children</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&amp; it)<span class="keyword"> const</span>
 
1282
<a name="l01360"></a><a class="code" href="classtree.html#96f82a90a3e21e82f486f325b0cf9faa">01360</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classtree.html#96f82a90a3e21e82f486f325b0cf9faa" title="Count the number of children of node at position.">tree&lt;T, tree_node_allocator&gt;::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>&amp; it)<span class="keyword"> const</span>
1287
1283
<a name="l01361"></a>01361 <span class="keyword">   </span>{
1288
 
<a name="l01362"></a>01362    <a class="code" href="classtree__node__.html">tree_node</a> *pos=it.node-&gt;first_child;
 
1284
<a name="l01362"></a>01362    <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=it.node-&gt;first_child;
1289
1285
<a name="l01363"></a>01363    <span class="keywordflow">if</span>(pos==0) <span class="keywordflow">return</span> 0;
1290
1286
<a name="l01364"></a>01364    
1291
1287
<a name="l01365"></a>01365    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ret=1;
1293
1289
<a name="l01367"></a>01367 <span class="comment">//      ++ret;</span>
1294
1290
<a name="l01368"></a>01368 <span class="comment">//      pos=pos-&gt;next_sibling;</span>
1295
1291
<a name="l01369"></a>01369 <span class="comment">//      }</span>
1296
 
<a name="l01370"></a>01370    <span class="keywordflow">while</span>((pos=pos-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>))
 
1292
<a name="l01370"></a>01370    <span class="keywordflow">while</span>((pos=pos-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>))
1297
1293
<a name="l01371"></a>01371       ++ret;
1298
1294
<a name="l01372"></a>01372    <span class="keywordflow">return</span> ret;
1299
1295
<a name="l01373"></a>01373    }
1300
1296
<a name="l01374"></a>01374 
1301
1297
<a name="l01375"></a>01375 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1302
 
<a name="l01376"></a><a class="code" href="classtree.html#752796c631b632e0e3c3cecf348ff24e">01376</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classtree.html#752796c631b632e0e3c3cecf348ff24e">tree&lt;T, tree_node_allocator&gt;::number_of_siblings</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&amp; it)<span class="keyword"> const</span>
 
1298
<a name="l01376"></a><a class="code" href="classtree.html#3cddce970c4d44af57cf9ec0d7c3d009">01376</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classtree.html#3cddce970c4d44af57cf9ec0d7c3d009" title="Count the number of &amp;#39;next&amp;#39; siblings of node at iterator.">tree&lt;T, tree_node_allocator&gt;::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>&amp; it)<span class="keyword"> const</span>
1303
1299
<a name="l01377"></a>01377 <span class="keyword">   </span>{
1304
 
<a name="l01378"></a>01378    <a class="code" href="classtree__node__.html">tree_node</a> *pos=it.node;
 
1300
<a name="l01378"></a>01378    <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=it.node;
1305
1301
<a name="l01379"></a>01379    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ret=0;
1306
 
<a name="l01380"></a>01380    <span class="keywordflow">while</span>(pos-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a> &amp;&amp; 
1307
 
<a name="l01381"></a>01381          pos-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>!=<a class="code" href="classtree.html#fbb20670ecc61fe9ad3e7bd502227397">head</a> &amp;&amp;
1308
 
<a name="l01382"></a>01382          pos-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>!=<a class="code" href="classtree.html#e45df182e3702084c6bd147d6479cc08">feet</a>) {
 
1302
<a name="l01380"></a>01380    <span class="keywordflow">while</span>(pos-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a> &amp;&amp; 
 
1303
<a name="l01381"></a>01381          pos-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>!=<a class="code" href="classtree.html#10991cbf1497e125c0ef04d6e292e32b">head</a> &amp;&amp;
 
1304
<a name="l01382"></a>01382          pos-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>!=<a class="code" href="classtree.html#e1dbb80115ba483e37d081a2256c239b">feet</a>) {
1309
1305
<a name="l01383"></a>01383       ++ret;
1310
 
<a name="l01384"></a>01384       pos=pos-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
 
1306
<a name="l01384"></a>01384       pos=pos-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
1311
1307
<a name="l01385"></a>01385       }
1312
1308
<a name="l01386"></a>01386    <span class="keywordflow">return</span> ret;
1313
1309
<a name="l01387"></a>01387    }
1314
1310
<a name="l01388"></a>01388 
1315
1311
<a name="l01389"></a>01389 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1316
 
<a name="l01390"></a><a class="code" href="classtree.html#36b40bbffa2392b7a765cc74364b35d5">01390</a> <span class="keywordtype">void</span> <a class="code" href="classtree.html#36b40bbffa2392b7a765cc74364b35d5">tree&lt;T, tree_node_allocator&gt;::swap</a>(<a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> it)
 
1312
<a name="l01390"></a><a class="code" href="classtree.html#e842f9b70235bc2412b3c43bca759448">01390</a> <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...">tree&lt;T, tree_node_allocator&gt;::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)
1317
1313
<a name="l01391"></a>01391    {
1318
 
<a name="l01392"></a>01392    <a class="code" href="classtree__node__.html">tree_node</a> *nxt=it.node-&gt;next_sibling;
 
1314
<a name="l01392"></a>01392    <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> *nxt=it.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
1319
1315
<a name="l01393"></a>01393    <span class="keywordflow">if</span>(nxt) {
1320
 
<a name="l01394"></a>01394       <span class="keywordflow">if</span>(it.node-&gt;prev_sibling)
1321
 
<a name="l01395"></a>01395          it.node-&gt;prev_sibling-&gt;next_sibling=nxt;
 
1316
<a name="l01394"></a>01394       <span class="keywordflow">if</span>(it.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>)
 
1317
<a name="l01395"></a>01395          it.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>-&gt;next_sibling=nxt;
1322
1318
<a name="l01396"></a>01396       <span class="keywordflow">else</span>
1323
 
<a name="l01397"></a>01397          it.node-&gt;parent-&gt;first_child=nxt;
1324
 
<a name="l01398"></a>01398       nxt-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=it.node-&gt;prev_sibling;
1325
 
<a name="l01399"></a>01399       <a class="code" href="classtree__node__.html">tree_node</a> *nxtnxt=nxt-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
 
1319
<a name="l01397"></a>01397          it.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>-&gt;first_child=nxt;
 
1320
<a name="l01398"></a>01398       nxt-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=it.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
 
1321
<a name="l01399"></a>01399       <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> *nxtnxt=nxt-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
1326
1322
<a name="l01400"></a>01400       <span class="keywordflow">if</span>(nxtnxt)
1327
 
<a name="l01401"></a>01401          nxtnxt-&gt;<a class="code" href="classtree__node__.html#3dfb7ec8612428977956b9654364d7e0">prev_sibling</a>=it.node;
 
1323
<a name="l01401"></a>01401          nxtnxt-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=it.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>;
1328
1324
<a name="l01402"></a>01402       <span class="keywordflow">else</span>
1329
 
<a name="l01403"></a>01403          it.node-&gt;parent-&gt;last_child=it.node;
1330
 
<a name="l01404"></a>01404       nxt-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>=it.node;
1331
 
<a name="l01405"></a>01405       it.node-&gt;prev_sibling=nxt;
1332
 
<a name="l01406"></a>01406       it.node-&gt;next_sibling=nxtnxt;
 
1325
<a name="l01403"></a>01403          it.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>-&gt;last_child=it.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>;
 
1326
<a name="l01404"></a>01404       nxt-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=it.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>;
 
1327
<a name="l01405"></a>01405       it.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>=nxt;
 
1328
<a name="l01406"></a>01406       it.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>=nxtnxt;
1333
1329
<a name="l01407"></a>01407       }
1334
1330
<a name="l01408"></a>01408    }
1335
1331
<a name="l01409"></a>01409 
1348
1344
<a name="l01422"></a>01422 <span class="comment">//    }</span>
1349
1345
<a name="l01423"></a>01423 
1350
1346
<a name="l01424"></a>01424 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1351
 
<a name="l01425"></a><a class="code" href="classtree.html#b983b7823bc78d7a5efaf994938188a2">01425</a> <span class="keywordtype">bool</span> <a class="code" href="classtree.html#b983b7823bc78d7a5efaf994938188a2">tree&lt;T, tree_node_allocator&gt;::is_in_subtree</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&amp; it, <span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&amp; begin, 
1352
 
<a name="l01426"></a>01426                                                  <span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&amp; end)<span class="keyword"> const</span>
 
1347
<a name="l01425"></a><a class="code" href="classtree.html#825e2106781e846bdd8732c117dc21db">01425</a> <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.">tree&lt;T, tree_node_allocator&gt;::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>&amp; it, <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>&amp; <a class="code" href="classtree.html#76b3a629c0208d5ae5b4ffcd4492e05e" title="Return iterator to the beginning of the tree.">begin</a>, 
 
1348
<a name="l01426"></a>01426                                                  <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>&amp; <a class="code" href="classtree.html#0d09fe9fd34fbfc9c9e4e28cb694448e" title="Return iterator to the end of the tree.">end</a>)<span class="keyword"> const</span>
1353
1349
<a name="l01427"></a>01427 <span class="keyword">   </span>{
1354
1350
<a name="l01428"></a>01428    <span class="comment">// FIXME: this should be optimised.</span>
1355
 
<a name="l01429"></a>01429    <a class="code" href="classtree_1_1pre__order__iterator.html">pre_order_iterator</a> tmp=<a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">begin</a>;
1356
 
<a name="l01430"></a>01430    <span class="keywordflow">while</span>(tmp!=<a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">end</a>) {
 
1351
<a name="l01429"></a>01429    <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> tmp=begin;
 
1352
<a name="l01430"></a>01430    <span class="keywordflow">while</span>(tmp!=end) {
1357
1353
<a name="l01431"></a>01431       <span class="keywordflow">if</span>(tmp==it) <span class="keywordflow">return</span> <span class="keyword">true</span>;
1358
1354
<a name="l01432"></a>01432       ++tmp;
1359
1355
<a name="l01433"></a>01433       }
1361
1357
<a name="l01435"></a>01435    }
1362
1358
<a name="l01436"></a>01436 
1363
1359
<a name="l01437"></a>01437 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1364
 
<a name="l01438"></a><a class="code" href="classtree.html#701009e4869f78144556ebc4ce33750f">01438</a> <span class="keywordtype">bool</span> <a class="code" href="classtree.html#701009e4869f78144556ebc4ce33750f">tree&lt;T, tree_node_allocator&gt;::is_valid</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&amp; it)<span class="keyword"> const</span>
 
1360
<a name="l01438"></a><a class="code" href="classtree.html#9605b028195248894dc8cf506cd256e3">01438</a> <span class="keywordtype">bool</span> <a class="code" href="classtree.html#9605b028195248894dc8cf506cd256e3" title="Determine whether the iterator is an &amp;#39;end&amp;#39; iterator and thus not actually...">tree&lt;T, tree_node_allocator&gt;::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>&amp; it)<span class="keyword"> const</span>
1365
1361
<a name="l01439"></a>01439 <span class="keyword">   </span>{
1366
 
<a name="l01440"></a>01440    <span class="keywordflow">if</span>(it.node==0 || it.node==<a class="code" href="classtree.html#e45df182e3702084c6bd147d6479cc08">feet</a>) <span class="keywordflow">return</span> <span class="keyword">false</span>;
 
1362
<a name="l01440"></a>01440    <span class="keywordflow">if</span>(it.node==0 || it.node==<a class="code" href="classtree.html#e1dbb80115ba483e37d081a2256c239b">feet</a>) <span class="keywordflow">return</span> <span class="keyword">false</span>;
1367
1363
<a name="l01441"></a>01441    <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;
1368
1364
<a name="l01442"></a>01442    }
1369
1365
<a name="l01443"></a>01443 
1370
1366
<a name="l01444"></a>01444 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1371
 
<a name="l01445"></a><a class="code" href="classtree.html#e470529bbd14990a0272a82724b93217">01445</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classtree.html#e470529bbd14990a0272a82724b93217">tree&lt;T, tree_node_allocator&gt;::index</a>(<a class="code" href="classtree_1_1sibling__iterator.html">sibling_iterator</a> it)<span class="keyword"> const</span>
 
1367
<a name="l01445"></a><a class="code" href="classtree.html#de5ec1ba55f94165062e50d01ec35d86">01445</a> <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.">tree&lt;T, tree_node_allocator&gt;::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>
1372
1368
<a name="l01446"></a>01446 <span class="keyword">   </span>{
1373
1369
<a name="l01447"></a>01447    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ind=0;
1374
 
<a name="l01448"></a>01448    <span class="keywordflow">if</span>(it.node-&gt;parent==0) {
1375
 
<a name="l01449"></a>01449       <span class="keywordflow">while</span>(it.node-&gt;prev_sibling!=<a class="code" href="classtree.html#fbb20670ecc61fe9ad3e7bd502227397">head</a>) {
1376
 
<a name="l01450"></a>01450          it.node=it.node-&gt;prev_sibling;
 
1370
<a name="l01448"></a>01448    <span class="keywordflow">if</span>(it.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>==0) {
 
1371
<a name="l01449"></a>01449       <span class="keywordflow">while</span>(it.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>!=<a class="code" href="classtree.html#10991cbf1497e125c0ef04d6e292e32b">head</a>) {
 
1372
<a name="l01450"></a>01450          it.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=it.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
1377
1373
<a name="l01451"></a>01451          ++ind;
1378
1374
<a name="l01452"></a>01452          }
1379
1375
<a name="l01453"></a>01453       }
1380
1376
<a name="l01454"></a>01454    <span class="keywordflow">else</span> {
1381
 
<a name="l01455"></a>01455       <span class="keywordflow">while</span>(it.node-&gt;prev_sibling!=0) {
1382
 
<a name="l01456"></a>01456          it.node=it.node-&gt;prev_sibling;
 
1377
<a name="l01455"></a>01455       <span class="keywordflow">while</span>(it.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>!=0) {
 
1378
<a name="l01456"></a>01456          it.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=it.<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
1383
1379
<a name="l01457"></a>01457          ++ind;
1384
1380
<a name="l01458"></a>01458          }
1385
1381
<a name="l01459"></a>01459       }
1388
1384
<a name="l01462"></a>01462 
1389
1385
<a name="l01463"></a>01463 
1390
1386
<a name="l01464"></a>01464 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1391
 
<a name="l01465"></a><a class="code" href="classtree.html#853359c74d04faf26a086dca7c2c5dc1">01465</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::sibling_iterator</a> <a class="code" href="classtree.html#853359c74d04faf26a086dca7c2c5dc1">tree&lt;T, tree_node_allocator&gt;::child</a>(<span class="keyword">const</span> <a class="code" href="classtree_1_1iterator__base.html">iterator_base</a>&amp; it, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num)<span class="keyword"> const</span>
 
1387
<a name="l01465"></a><a class="code" href="classtree.html#446c722c82607f8b3243a9153b665d19">01465</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::sibling_iterator</a> <a class="code" href="classtree.html#446c722c82607f8b3243a9153b665d19" title="Inverse of &amp;#39;index&amp;#39;: return the n-th child of the node at position.">tree&lt;T, tree_node_allocator&gt;::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>&amp; it, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num)<span class="keyword"> const</span>
1392
1388
<a name="l01466"></a>01466 <span class="keyword">   </span>{
1393
 
<a name="l01467"></a>01467    <a class="code" href="classtree__node__.html">tree_node</a> *tmp=it.node-&gt;first_child;
 
1389
<a name="l01467"></a>01467    <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=it.node-&gt;first_child;
1394
1390
<a name="l01468"></a>01468    <span class="keywordflow">while</span>(num--) {
1395
1391
<a name="l01469"></a>01469       assert(tmp!=0);
1396
 
<a name="l01470"></a>01470       tmp=tmp-&gt;<a class="code" href="classtree__node__.html#0d68e7676373568245853ea4a29c3fe1">next_sibling</a>;
 
1392
<a name="l01470"></a>01470       tmp=tmp-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
1397
1393
<a name="l01471"></a>01471       }
1398
1394
<a name="l01472"></a>01472    <span class="keywordflow">return</span> tmp;
1399
1395
<a name="l01473"></a>01473    }
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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1407
 
<a name="l01481"></a>01481 <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1413
 
<a name="l01487"></a>01487 <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1419
 
<a name="l01493"></a>01493 T&amp; <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::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&amp; <a class="code" href="classtree_1_1iterator__base.html#ada7cbe4d4f9a5ec29db78d10712edc6">tree&lt;T, tree_node_allocator&gt;::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-&gt;data;
 
1417
<a name="l01495"></a>01495    <span class="keywordflow">return</span> <a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1425
 
<a name="l01499"></a>01499 T* <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::iterator_base::operator-&gt;</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&lt;T, tree_node_allocator&gt;::iterator_base::operator-&gt;</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> &amp;(node-&gt;data);
 
1423
<a name="l01501"></a>01501    <span class="keywordflow">return</span> &amp;(<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1431
 
<a name="l01505"></a>01505 <span class="keywordtype">bool</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::post_order_iterator::operator!=</a>(<span class="keyword">const</span> post_order_iterator&amp; 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&lt;T, tree_node_allocator&gt;::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>&amp; 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-&gt;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-&gt;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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1438
 
<a name="l01512"></a>01512 <span class="keywordtype">bool</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::post_order_iterator::operator==</a>(<span class="keyword">const</span> post_order_iterator&amp; 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&lt;T, tree_node_allocator&gt;::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>&amp; 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-&gt;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-&gt;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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1445
 
<a name="l01519"></a>01519 <span class="keywordtype">bool</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator::operator!=</a>(<span class="keyword">const</span> pre_order_iterator&amp; 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&lt;T, tree_node_allocator&gt;::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>&amp; 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-&gt;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-&gt;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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1452
 
<a name="l01526"></a>01526 <span class="keywordtype">bool</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator::operator==</a>(<span class="keyword">const</span> pre_order_iterator&amp; 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&lt;T, tree_node_allocator&gt;::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>&amp; 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-&gt;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-&gt;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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1459
 
<a name="l01533"></a>01533 <span class="keywordtype">bool</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::sibling_iterator::operator!=</a>(<span class="keyword">const</span> sibling_iterator&amp; 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&lt;T, tree_node_allocator&gt;::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>&amp; 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-&gt;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-&gt;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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1466
 
<a name="l01540"></a>01540 <span class="keywordtype">bool</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::sibling_iterator::operator==</a>(<span class="keyword">const</span> sibling_iterator&amp; 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&lt;T, tree_node_allocator&gt;::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>&amp; 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-&gt;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-&gt;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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1473
 
<a name="l01547"></a>01547 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::sibling_iterator</a> <a class="code" href="classtree.html#11ef5dd7469082ebb7f98f08caf91c00">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::sibling_iterator</a> <a class="code" href="classtree_1_1iterator__base.html#7fad2f6cc1a6a667b5c71bb16c9b84e5">tree&lt;T, tree_node_allocator&gt;::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-&gt;first_child);
1476
 
<a name="l01550"></a>01550    ret.parent_=this-&gt;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>-&gt;<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-&gt;<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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1481
 
<a name="l01555"></a>01555 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::sibling_iterator</a> <a class="code" href="classtree.html#076873ec5384d8f6a5f17b01da552852">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::sibling_iterator</a> <a class="code" href="classtree_1_1iterator__base.html#399dabd62f0659c02bfda59b26bdeefe">tree&lt;T, tree_node_allocator&gt;::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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1489
 
<a name="l01563"></a>01563 <span class="keywordtype">void</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1495
 
<a name="l01569"></a>01569 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classtree.html#9e33e1e03c74f7fd67d0c8ab1b014f70">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::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-&gt;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>-&gt;<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-&gt;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>-&gt;<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-&gt;next_sibling;
 
1499
<a name="l01577"></a>01577       pos=pos-&gt;<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    }
1510
1506
<a name="l01584"></a>01584 <span class="comment">// Pre-order iterator</span>
1511
1507
<a name="l01585"></a>01585 
1512
1508
<a name="l01586"></a>01586 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1513
 
<a name="l01587"></a>01587 <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator::pre_order_iterator</a>() 
1514
 
<a name="l01588"></a>01588    : iterator_base(0)
 
1509
<a name="l01587"></a><a class="code" href="classtree_1_1pre__order__iterator.html#aa4abe430ae678fa7d7753d9599be049">01587</a> <a class="code" href="classtree_1_1pre__order__iterator.html#aa4abe430ae678fa7d7753d9599be049">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator::pre_order_iterator</a>() 
 
1510
<a name="l01588"></a>01588    : <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>(0)
1515
1511
<a name="l01589"></a>01589    {
1516
1512
<a name="l01590"></a>01590    }
1517
1513
<a name="l01591"></a>01591 
1518
1514
<a name="l01592"></a>01592 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1519
 
<a name="l01593"></a>01593 <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator::pre_order_iterator</a>(tree_node *tn)
1520
 
<a name="l01594"></a>01594    : iterator_base(tn)
 
1515
<a name="l01593"></a><a class="code" href="classtree_1_1pre__order__iterator.html#afdaf0da69c4406b916c14c5589fa391">01593</a> <a class="code" href="classtree_1_1pre__order__iterator.html#aa4abe430ae678fa7d7753d9599be049">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator::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> *tn)
 
1516
<a name="l01594"></a>01594    : <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>(tn)
1521
1517
<a name="l01595"></a>01595    {
1522
1518
<a name="l01596"></a>01596    }
1523
1519
<a name="l01597"></a>01597 
1524
1520
<a name="l01598"></a>01598 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1525
 
<a name="l01599"></a>01599 <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator::pre_order_iterator</a>(<span class="keyword">const</span> iterator_base &amp;other)
1526
 
<a name="l01600"></a>01600    : iterator_base(other.node)
 
1521
<a name="l01599"></a><a class="code" href="classtree_1_1pre__order__iterator.html#969cfeb31a2e92d1a64d9f2945bbedf7">01599</a> <a class="code" href="classtree_1_1pre__order__iterator.html#aa4abe430ae678fa7d7753d9599be049">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator::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> &amp;other)
 
1522
<a name="l01600"></a>01600    : <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>)
1527
1523
<a name="l01601"></a>01601    {
1528
1524
<a name="l01602"></a>01602    }
1529
1525
<a name="l01603"></a>01603 
1530
1526
<a name="l01604"></a>01604 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1531
 
<a name="l01605"></a>01605 <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator::pre_order_iterator</a>(<span class="keyword">const</span> sibling_iterator&amp; other)
1532
 
<a name="l01606"></a>01606    : iterator_base(other.node)
 
1527
<a name="l01605"></a><a class="code" href="classtree_1_1pre__order__iterator.html#2705495c89beecc86107ca742a35507f">01605</a> <a class="code" href="classtree_1_1pre__order__iterator.html#aa4abe430ae678fa7d7753d9599be049">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator::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>&amp; other)
 
1528
<a name="l01606"></a>01606    : <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>)
1533
1529
<a name="l01607"></a>01607    {
1534
1530
<a name="l01608"></a>01608    <span class="keywordflow">if</span>(this-&gt;node==0) {
1535
 
<a name="l01609"></a>01609       <span class="keywordflow">if</span>(other.range_last()!=0)
1536
 
<a name="l01610"></a>01610          this-&gt;node=other.range_last();
 
1531
<a name="l01609"></a>01609       <span class="keywordflow">if</span>(other.<a class="code" href="classtree_1_1sibling__iterator.html#85438655c23ba60d2a4f83787e3dcf48">range_last</a>()!=0)
 
1532
<a name="l01610"></a>01610          this-&gt;node=other.<a class="code" href="classtree_1_1sibling__iterator.html#85438655c23ba60d2a4f83787e3dcf48">range_last</a>();
1537
1533
<a name="l01611"></a>01611       <span class="keywordflow">else</span> 
1538
 
<a name="l01612"></a>01612          this-&gt;node=other.parent_;
1539
 
<a name="l01613"></a>01613       this-&gt;skip_children();
 
1534
<a name="l01612"></a>01612          this-&gt;<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>;
 
1535
<a name="l01613"></a>01613       this-&gt;<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>();
1540
1536
<a name="l01614"></a>01614       ++(*this);
1541
1537
<a name="l01615"></a>01615       }
1542
1538
<a name="l01616"></a>01616    }
1543
1539
<a name="l01617"></a>01617 
1544
1540
<a name="l01618"></a>01618 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1545
 
<a name="l01619"></a>01619 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator</a>&amp; <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator::operator++</a>()
 
1541
<a name="l01619"></a><a class="code" href="classtree_1_1pre__order__iterator.html#07b77d1591ad7f05e4531489561d36d2">01619</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator</a>&amp; <a class="code" href="classtree_1_1pre__order__iterator.html#07b77d1591ad7f05e4531489561d36d2">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator::operator++</a>()
1546
1542
<a name="l01620"></a>01620    {
1547
1543
<a name="l01621"></a>01621    assert(this-&gt;node!=0);
1548
1544
<a name="l01622"></a>01622    <span class="keywordflow">if</span>(!this-&gt;skip_current_children_ &amp;&amp; this-&gt;node-&gt;first_child != 0) {
1549
 
<a name="l01623"></a>01623       this-&gt;node=this-&gt;node-&gt;first_child;
 
1545
<a name="l01623"></a>01623       this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>;
1550
1546
<a name="l01624"></a>01624       }
1551
1547
<a name="l01625"></a>01625    <span class="keywordflow">else</span> {
1552
 
<a name="l01626"></a>01626       this-&gt;skip_current_children_=<span class="keyword">false</span>;
 
1548
<a name="l01626"></a>01626       this-&gt;<a class="code" href="classtree_1_1iterator__base.html#88239267268c728952e0cd89b9326e82">skip_current_children_</a>=<span class="keyword">false</span>;
1553
1549
<a name="l01627"></a>01627       <span class="keywordflow">while</span>(this-&gt;node-&gt;next_sibling==0) {
1554
 
<a name="l01628"></a>01628          this-&gt;node=this-&gt;node-&gt;parent;
 
1550
<a name="l01628"></a>01628          this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>;
1555
1551
<a name="l01629"></a>01629          <span class="keywordflow">if</span>(this-&gt;node==0)
1556
1552
<a name="l01630"></a>01630             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1557
1553
<a name="l01631"></a>01631          }
1558
 
<a name="l01632"></a>01632       this-&gt;node=this-&gt;node-&gt;next_sibling;
 
1554
<a name="l01632"></a>01632       this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
1559
1555
<a name="l01633"></a>01633       }
1560
1556
<a name="l01634"></a>01634    <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1561
1557
<a name="l01635"></a>01635    }
1562
1558
<a name="l01636"></a>01636 
1563
1559
<a name="l01637"></a>01637 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1564
 
<a name="l01638"></a>01638 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator</a>&amp; <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator::operator--</a>()
 
1560
<a name="l01638"></a><a class="code" href="classtree_1_1pre__order__iterator.html#4e2dd21653724b6413d9949caf9bb107">01638</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator</a>&amp; <a class="code" href="classtree_1_1pre__order__iterator.html#4e2dd21653724b6413d9949caf9bb107">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator::operator--</a>()
1565
1561
<a name="l01639"></a>01639    {
1566
1562
<a name="l01640"></a>01640    assert(this-&gt;node!=0);
1567
1563
<a name="l01641"></a>01641    <span class="keywordflow">if</span>(this-&gt;node-&gt;prev_sibling) {
1568
 
<a name="l01642"></a>01642       this-&gt;node=this-&gt;node-&gt;prev_sibling;
 
1564
<a name="l01642"></a>01642       this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
1569
1565
<a name="l01643"></a>01643       <span class="keywordflow">while</span>(this-&gt;node-&gt;last_child)
1570
 
<a name="l01644"></a>01644          this-&gt;node=this-&gt;node-&gt;last_child;
 
1566
<a name="l01644"></a>01644          this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#611d3c41c716dae6bf2012e3d9152933">last_child</a>;
1571
1567
<a name="l01645"></a>01645       }
1572
1568
<a name="l01646"></a>01646    <span class="keywordflow">else</span> {
1573
 
<a name="l01647"></a>01647       this-&gt;node=this-&gt;node-&gt;parent;
 
1569
<a name="l01647"></a>01647       this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>;
1574
1570
<a name="l01648"></a>01648       <span class="keywordflow">if</span>(this-&gt;node==0)
1575
1571
<a name="l01649"></a>01649          <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1576
1572
<a name="l01650"></a>01650       }
1578
1574
<a name="l01652"></a>01652 }
1579
1575
<a name="l01653"></a>01653 
1580
1576
<a name="l01654"></a>01654 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1581
 
<a name="l01655"></a>01655 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator</a> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator::operator++</a>(<span class="keywordtype">int</span> n)
 
1577
<a name="l01655"></a><a class="code" href="classtree_1_1pre__order__iterator.html#d99a34d4c6cbfaa1de621b276a363856">01655</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator</a> <a class="code" href="classtree_1_1pre__order__iterator.html#07b77d1591ad7f05e4531489561d36d2">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator::operator++</a>(<span class="keywordtype">int</span> n)
1582
1578
<a name="l01656"></a>01656    {
1583
 
<a name="l01657"></a>01657    pre_order_iterator copy = *<span class="keyword">this</span>;
 
1579
<a name="l01657"></a>01657    <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> copy = *<span class="keyword">this</span>;
1584
1580
<a name="l01658"></a>01658    ++(*this);
1585
1581
<a name="l01659"></a>01659    <span class="keywordflow">return</span> copy;
1586
1582
<a name="l01660"></a>01660    }
1587
1583
<a name="l01661"></a>01661 
1588
1584
<a name="l01662"></a>01662 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1589
 
<a name="l01663"></a>01663 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator</a> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator::operator--</a>(<span class="keywordtype">int</span> n)
 
1585
<a name="l01663"></a><a class="code" href="classtree_1_1pre__order__iterator.html#9ccab7bd408c6d0a221f69d11f7f3717">01663</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator</a> <a class="code" href="classtree_1_1pre__order__iterator.html#4e2dd21653724b6413d9949caf9bb107">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator::operator--</a>(<span class="keywordtype">int</span> n)
1590
1586
<a name="l01664"></a>01664 {
1591
 
<a name="l01665"></a>01665   pre_order_iterator copy = *<span class="keyword">this</span>;
 
1587
<a name="l01665"></a>01665   <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> copy = *<span class="keyword">this</span>;
1592
1588
<a name="l01666"></a>01666   --(*this);
1593
1589
<a name="l01667"></a>01667   <span class="keywordflow">return</span> copy;
1594
1590
<a name="l01668"></a>01668 }
1595
1591
<a name="l01669"></a>01669 
1596
1592
<a name="l01670"></a>01670 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1597
 
<a name="l01671"></a>01671 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator</a>&amp; <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator::operator+=</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num)
 
1593
<a name="l01671"></a><a class="code" href="classtree_1_1pre__order__iterator.html#5ab66cd50ae22c9b246231b41b7720f5">01671</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator</a>&amp; <a class="code" href="classtree_1_1pre__order__iterator.html#5ab66cd50ae22c9b246231b41b7720f5">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator::operator+=</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num)
1598
1594
<a name="l01672"></a>01672    {
1599
1595
<a name="l01673"></a>01673    <span class="keywordflow">while</span>(num&gt;0) {
1600
1596
<a name="l01674"></a>01674       ++(*this);
1604
1600
<a name="l01678"></a>01678    }
1605
1601
<a name="l01679"></a>01679 
1606
1602
<a name="l01680"></a>01680 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1607
 
<a name="l01681"></a>01681 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator</a>&amp; <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator::operator-=</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num)
 
1603
<a name="l01681"></a><a class="code" href="classtree_1_1pre__order__iterator.html#722aedfd8f8be3490324a587d17cb133">01681</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator</a>&amp; <a class="code" href="classtree_1_1pre__order__iterator.html#722aedfd8f8be3490324a587d17cb133">tree&lt;T, tree_node_allocator&gt;::pre_order_iterator::operator-=</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num)
1608
1604
<a name="l01682"></a>01682    {
1609
1605
<a name="l01683"></a>01683    <span class="keywordflow">while</span>(num&gt;0) {
1610
1606
<a name="l01684"></a>01684       --(*this);
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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1621
 
<a name="l01695"></a>01695 <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1627
 
<a name="l01701"></a>01701 <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1633
 
<a name="l01707"></a>01707 <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::post_order_iterator::post_order_iterator</a>(<span class="keyword">const</span> iterator_base &amp;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&lt;T, tree_node_allocator&gt;::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> &amp;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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1639
 
<a name="l01713"></a>01713 <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::post_order_iterator::post_order_iterator</a>(<span class="keyword">const</span> sibling_iterator&amp; 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&lt;T, tree_node_allocator&gt;::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>&amp; 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-&gt;node==0) {
1643
 
<a name="l01717"></a>01717       <span class="keywordflow">if</span>(other.range_last()!=0)
1644
 
<a name="l01718"></a>01718          this-&gt;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-&gt;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-&gt;node=other.parent_;
1647
 
<a name="l01721"></a>01721       this-&gt;skip_children();
 
1642
<a name="l01720"></a>01720          this-&gt;<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-&gt;<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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1653
 
<a name="l01727"></a>01727 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::post_order_iterator</a>&amp; <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::post_order_iterator</a>&amp; <a class="code" href="classtree_1_1post__order__iterator.html#baba42c4ecb0a0bb8b21b0c28dfa3009">tree&lt;T, tree_node_allocator&gt;::post_order_iterator::operator++</a>()
1654
1650
<a name="l01728"></a>01728    {
1655
1651
<a name="l01729"></a>01729    assert(this-&gt;node!=0);
1656
1652
<a name="l01730"></a>01730    <span class="keywordflow">if</span>(this-&gt;node-&gt;next_sibling==0) {
1657
 
<a name="l01731"></a>01731       this-&gt;node=this-&gt;node-&gt;parent;
1658
 
<a name="l01732"></a>01732       this-&gt;skip_current_children_=<span class="keyword">false</span>;
 
1653
<a name="l01731"></a>01731       this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>;
 
1654
<a name="l01732"></a>01732       this-&gt;<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-&gt;node=this-&gt;node-&gt;next_sibling;
 
1657
<a name="l01735"></a>01735       this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
1662
1658
<a name="l01736"></a>01736       <span class="keywordflow">if</span>(this-&gt;skip_current_children_) {
1663
 
<a name="l01737"></a>01737          this-&gt;skip_current_children_=<span class="keyword">false</span>;
 
1659
<a name="l01737"></a>01737          this-&gt;<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-&gt;node-&gt;first_child)
1667
 
<a name="l01741"></a>01741             this-&gt;node=this-&gt;node-&gt;first_child;
 
1663
<a name="l01741"></a>01741             this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1674
 
<a name="l01748"></a>01748 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::post_order_iterator</a>&amp; <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::post_order_iterator</a>&amp; <a class="code" href="classtree_1_1post__order__iterator.html#f70bbd10b24ca0cf1c674e4ef40899db">tree&lt;T, tree_node_allocator&gt;::post_order_iterator::operator--</a>()
1675
1671
<a name="l01749"></a>01749    {
1676
1672
<a name="l01750"></a>01750    assert(this-&gt;node!=0);
1677
1673
<a name="l01751"></a>01751    <span class="keywordflow">if</span>(this-&gt;skip_current_children_ || this-&gt;node-&gt;last_child==0) {
1678
 
<a name="l01752"></a>01752       this-&gt;skip_current_children_=<span class="keyword">false</span>;
 
1674
<a name="l01752"></a>01752       this-&gt;<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-&gt;node-&gt;prev_sibling==0)
1680
 
<a name="l01754"></a>01754          this-&gt;node=this-&gt;node-&gt;parent;
1681
 
<a name="l01755"></a>01755       this-&gt;node=this-&gt;node-&gt;prev_sibling;
 
1676
<a name="l01754"></a>01754          this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>;
 
1677
<a name="l01755"></a>01755       this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<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-&gt;node=this-&gt;node-&gt;last_child;
 
1680
<a name="l01758"></a>01758       this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1690
 
<a name="l01764"></a>01764 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::post_order_iterator</a> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::post_order_iterator</a> <a class="code" href="classtree_1_1post__order__iterator.html#baba42c4ecb0a0bb8b21b0c28dfa3009">tree&lt;T, tree_node_allocator&gt;::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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1698
 
<a name="l01772"></a>01772 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::post_order_iterator</a> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::post_order_iterator</a> <a class="code" href="classtree_1_1post__order__iterator.html#f70bbd10b24ca0cf1c674e4ef40899db">tree&lt;T, tree_node_allocator&gt;::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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1707
 
<a name="l01781"></a>01781 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::post_order_iterator</a>&amp; <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::post_order_iterator</a>&amp; <a class="code" href="classtree_1_1post__order__iterator.html#0b6c2246f41b0a2ff8e4c9d9efcee879">tree&lt;T, tree_node_allocator&gt;::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&gt;0) {
1710
1706
<a name="l01784"></a>01784       ++(*this);
1714
1710
<a name="l01788"></a>01788    }
1715
1711
<a name="l01789"></a>01789 
1716
1712
<a name="l01790"></a>01790 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1717
 
<a name="l01791"></a>01791 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::post_order_iterator</a>&amp; <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::post_order_iterator::operator-=</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num)
 
1713
<a name="l01791"></a><a class="code" href="classtree_1_1post__order__iterator.html#93b7ddae75f30985a0d81f38bcbaa306">01791</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::post_order_iterator</a>&amp; <a class="code" href="classtree_1_1post__order__iterator.html#93b7ddae75f30985a0d81f38bcbaa306">tree&lt;T, tree_node_allocator&gt;::post_order_iterator::operator-=</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num)
1718
1714
<a name="l01792"></a>01792    {
1719
1715
<a name="l01793"></a>01793    <span class="keywordflow">while</span>(num&gt;0) {
1720
1716
<a name="l01794"></a>01794       --(*this);
1724
1720
<a name="l01798"></a>01798    }
1725
1721
<a name="l01799"></a>01799 
1726
1722
<a name="l01800"></a>01800 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1727
 
<a name="l01801"></a>01801 <span class="keywordtype">void</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::post_order_iterator::descend_all</a>()
 
1723
<a name="l01801"></a><a class="code" href="classtree_1_1post__order__iterator.html#ca4676b4986854521cfa2c7d84f62204">01801</a> <span class="keywordtype">void</span> <a class="code" href="classtree_1_1post__order__iterator.html#ca4676b4986854521cfa2c7d84f62204" title="Set iterator to the first child as deep as possible down the tree.">tree&lt;T, tree_node_allocator&gt;::post_order_iterator::descend_all</a>()
1728
1724
<a name="l01802"></a>01802    {
1729
1725
<a name="l01803"></a>01803    assert(this-&gt;node!=0);
1730
1726
<a name="l01804"></a>01804    <span class="keywordflow">while</span>(this-&gt;node-&gt;first_child)
1731
 
<a name="l01805"></a>01805       this-&gt;node=this-&gt;node-&gt;first_child;
 
1727
<a name="l01805"></a>01805       this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>;
1732
1728
<a name="l01806"></a>01806    }
1733
1729
<a name="l01807"></a>01807 
1734
1730
<a name="l01808"></a>01808 
1735
1731
<a name="l01809"></a>01809 <span class="comment">// Fixed depth iterator</span>
1736
1732
<a name="l01810"></a>01810 
1737
1733
<a name="l01811"></a>01811 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1738
 
<a name="l01812"></a>01812 <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator::fixed_depth_iterator</a>()
1739
 
<a name="l01813"></a>01813    : iterator_base()
 
1734
<a name="l01812"></a><a class="code" href="classtree_1_1fixed__depth__iterator.html#10f1d20ec2b62e4370a560ebcd84ad54">01812</a> <a class="code" href="classtree_1_1fixed__depth__iterator.html#10f1d20ec2b62e4370a560ebcd84ad54">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator::fixed_depth_iterator</a>()
 
1735
<a name="l01813"></a>01813    : <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>()
1740
1736
<a name="l01814"></a>01814    {
1741
1737
<a name="l01815"></a>01815    set_first_parent_();
1742
1738
<a name="l01816"></a>01816    }
1743
1739
<a name="l01817"></a>01817 
1744
1740
<a name="l01818"></a>01818 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1745
 
<a name="l01819"></a>01819 <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator::fixed_depth_iterator</a>(tree_node *tn)
1746
 
<a name="l01820"></a>01820    : iterator_base(tn)
 
1741
<a name="l01819"></a><a class="code" href="classtree_1_1fixed__depth__iterator.html#a9c0c41473a4d70efa17d7906829823c">01819</a> <a class="code" href="classtree_1_1fixed__depth__iterator.html#10f1d20ec2b62e4370a560ebcd84ad54">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator::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> *tn)
 
1742
<a name="l01820"></a>01820    : <a class="code" href="classtree_1_1iterator__base.html" title="Base class for iterators, only pointers stored, no traversal logic.">iterator_base</a>(tn)
1747
1743
<a name="l01821"></a>01821    {
1748
1744
<a name="l01822"></a>01822    set_first_parent_();
1749
1745
<a name="l01823"></a>01823    }
1750
1746
<a name="l01824"></a>01824 
1751
1747
<a name="l01825"></a>01825 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1752
 
<a name="l01826"></a>01826 <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator::fixed_depth_iterator</a>(<span class="keyword">const</span> iterator_base&amp; other)
1753
 
<a name="l01827"></a>01827    : iterator_base(other.node)
 
1748
<a name="l01826"></a><a class="code" href="classtree_1_1fixed__depth__iterator.html#64403be9e04a8e4929531b8e227b5d94">01826</a> <a class="code" href="classtree_1_1fixed__depth__iterator.html#10f1d20ec2b62e4370a560ebcd84ad54">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator::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>&amp; other)
 
1749
<a name="l01827"></a>01827    : <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>)
1754
1750
<a name="l01828"></a>01828    {
1755
1751
<a name="l01829"></a>01829    set_first_parent_();
1756
1752
<a name="l01830"></a>01830    }
1757
1753
<a name="l01831"></a>01831 
1758
1754
<a name="l01832"></a>01832 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1759
 
<a name="l01833"></a>01833 <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator::fixed_depth_iterator</a>(<span class="keyword">const</span> sibling_iterator&amp; other)
1760
 
<a name="l01834"></a>01834    : iterator_base(other.node), first_parent_(other.parent_)
 
1755
<a name="l01833"></a><a class="code" href="classtree_1_1fixed__depth__iterator.html#949317e3e8a986e72e0a8dbb79a00b03">01833</a> <a class="code" href="classtree_1_1fixed__depth__iterator.html#10f1d20ec2b62e4370a560ebcd84ad54">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator::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>&amp; other)
 
1756
<a name="l01834"></a>01834    : <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>), <a class="code" href="classtree_1_1fixed__depth__iterator.html#5f6c92f12c4281e94e950ccd70833985">first_parent_</a>(other.parent_)
1761
1757
<a name="l01835"></a>01835    {
1762
1758
<a name="l01836"></a>01836    find_leftmost_parent_();
1763
1759
<a name="l01837"></a>01837    }
1764
1760
<a name="l01838"></a>01838 
1765
1761
<a name="l01839"></a>01839 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1766
 
<a name="l01840"></a>01840 <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator::fixed_depth_iterator</a>(<span class="keyword">const</span> fixed_depth_iterator&amp; other)
1767
 
<a name="l01841"></a>01841    : iterator_base(other.node), first_parent_(other.first_parent_)
 
1762
<a name="l01840"></a><a class="code" href="classtree_1_1fixed__depth__iterator.html#4416f43946317c249652270fec7c84a6">01840</a> <a class="code" href="classtree_1_1fixed__depth__iterator.html#10f1d20ec2b62e4370a560ebcd84ad54">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator::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>&amp; other)
 
1763
<a name="l01841"></a>01841    : <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>), <a class="code" href="classtree_1_1fixed__depth__iterator.html#5f6c92f12c4281e94e950ccd70833985">first_parent_</a>(other.<a class="code" href="classtree_1_1fixed__depth__iterator.html#5f6c92f12c4281e94e950ccd70833985">first_parent_</a>)
1768
1764
<a name="l01842"></a>01842    {
1769
1765
<a name="l01843"></a>01843    }
1770
1766
<a name="l01844"></a>01844 
1773
1769
<a name="l01847"></a>01847    {
1774
1770
<a name="l01848"></a>01848    <span class="keywordflow">return</span>; <span class="comment">// FIXME: we do not use first_parent_ yet, and it actually needs some serious reworking if</span>
1775
1771
<a name="l01849"></a>01849            <span class="comment">// it is ever to work at the 'head' level.</span>
1776
 
<a name="l01850"></a>01850    first_parent_=0;
 
1772
<a name="l01850"></a>01850    <a class="code" href="classtree_1_1fixed__depth__iterator.html#5f6c92f12c4281e94e950ccd70833985">first_parent_</a>=0;
1777
1773
<a name="l01851"></a>01851    <span class="keywordflow">if</span>(this-&gt;node==0) <span class="keywordflow">return</span>;
1778
1774
<a name="l01852"></a>01852    <span class="keywordflow">if</span>(this-&gt;node-&gt;parent!=0)
1779
 
<a name="l01853"></a>01853       first_parent_=this-&gt;node-&gt;parent;
1780
 
<a name="l01854"></a>01854    <span class="keywordflow">if</span>(first_parent_)
 
1775
<a name="l01853"></a>01853       <a class="code" href="classtree_1_1fixed__depth__iterator.html#5f6c92f12c4281e94e950ccd70833985">first_parent_</a>=this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>;
 
1776
<a name="l01854"></a>01854    <span class="keywordflow">if</span>(<a class="code" href="classtree_1_1fixed__depth__iterator.html#5f6c92f12c4281e94e950ccd70833985">first_parent_</a>)
1781
1777
<a name="l01855"></a>01855       find_leftmost_parent_();
1782
1778
<a name="l01856"></a>01856    }
1783
1779
<a name="l01857"></a>01857 
1785
1781
<a name="l01859"></a>01859 <span class="keywordtype">void</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator::find_leftmost_parent_</a>()
1786
1782
<a name="l01860"></a>01860    {
1787
1783
<a name="l01861"></a>01861    <span class="keywordflow">return</span>; <span class="comment">// FIXME: see 'set_first_parent()'</span>
1788
 
<a name="l01862"></a>01862    <a class="code" href="classtree.html#ce325844a601660acbe7687991f8a225">tree_node</a> *tmppar=first_parent_;
 
1784
<a name="l01862"></a>01862    <a class="code" href="classtree.html#672d078d87ae97c58b732a940d7b8ca8">tree_node</a> *tmppar=<a class="code" href="classtree_1_1fixed__depth__iterator.html#5f6c92f12c4281e94e950ccd70833985">first_parent_</a>;
1789
1785
<a name="l01863"></a>01863    <span class="keywordflow">while</span>(tmppar-&gt;prev_sibling) {
1790
1786
<a name="l01864"></a>01864       tmppar=tmppar-&gt;prev_sibling;
1791
1787
<a name="l01865"></a>01865       <span class="keywordflow">if</span>(tmppar-&gt;first_child)
1792
 
<a name="l01866"></a>01866          first_parent_=tmppar;
 
1788
<a name="l01866"></a>01866          <a class="code" href="classtree_1_1fixed__depth__iterator.html#5f6c92f12c4281e94e950ccd70833985">first_parent_</a>=tmppar;
1793
1789
<a name="l01867"></a>01867       }
1794
1790
<a name="l01868"></a>01868    }
1795
1791
<a name="l01869"></a>01869 
1796
1792
<a name="l01870"></a>01870 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1797
 
<a name="l01871"></a>01871 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator</a>&amp; <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator::operator++</a>()
 
1793
<a name="l01871"></a><a class="code" href="classtree_1_1fixed__depth__iterator.html#71bcee62caa033974d5c0d94ab0dc0c6">01871</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator</a>&amp; <a class="code" href="classtree_1_1fixed__depth__iterator.html#71bcee62caa033974d5c0d94ab0dc0c6">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator::operator++</a>()
1798
1794
<a name="l01872"></a>01872    {
1799
1795
<a name="l01873"></a>01873    assert(this-&gt;node!=0);
1800
1796
<a name="l01874"></a>01874 
1801
1797
<a name="l01875"></a>01875    <span class="keywordflow">if</span>(this-&gt;node-&gt;next_sibling) {
1802
 
<a name="l01876"></a>01876       this-&gt;node=this-&gt;node-&gt;next_sibling;
 
1798
<a name="l01876"></a>01876       this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
1803
1799
<a name="l01877"></a>01877       }
1804
1800
<a name="l01878"></a>01878    <span class="keywordflow">else</span> { 
1805
1801
<a name="l01879"></a>01879       <span class="keywordtype">int</span> relative_depth=0;
1806
1802
<a name="l01880"></a>01880       upper:
1807
1803
<a name="l01881"></a>01881       <span class="keywordflow">do</span> {
1808
 
<a name="l01882"></a>01882          this-&gt;node=this-&gt;node-&gt;parent;
 
1804
<a name="l01882"></a>01882          this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>;
1809
1805
<a name="l01883"></a>01883          <span class="keywordflow">if</span>(this-&gt;node==0) <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1810
1806
<a name="l01884"></a>01884          --relative_depth;
1811
1807
<a name="l01885"></a>01885          } <span class="keywordflow">while</span>(this-&gt;node-&gt;next_sibling==0);
1812
1808
<a name="l01886"></a>01886       lower:
1813
 
<a name="l01887"></a>01887       this-&gt;node=this-&gt;node-&gt;next_sibling;
 
1809
<a name="l01887"></a>01887       this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
1814
1810
<a name="l01888"></a>01888       <span class="keywordflow">while</span>(this-&gt;node-&gt;first_child==0) {
1815
1811
<a name="l01889"></a>01889          <span class="keywordflow">if</span>(this-&gt;node-&gt;next_sibling==0)
1816
1812
<a name="l01890"></a>01890             <span class="keywordflow">goto</span> upper;
1817
 
<a name="l01891"></a>01891          this-&gt;node=this-&gt;node-&gt;next_sibling;
 
1813
<a name="l01891"></a>01891          this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#195a647282d6ab1de50d9ac87aa42bce">next_sibling</a>;
1818
1814
<a name="l01892"></a>01892          <span class="keywordflow">if</span>(this-&gt;node==0) <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1819
1815
<a name="l01893"></a>01893          }
1820
 
<a name="l01894"></a>01894       <span class="keywordflow">while</span>(relative_depth&lt;0 &amp;&amp; this-&gt;node-&gt;first_child!=0) {
1821
 
<a name="l01895"></a>01895          this-&gt;node=this-&gt;node-&gt;first_child;
 
1816
<a name="l01894"></a>01894       <span class="keywordflow">while</span>(relative_depth&lt;0 &amp;&amp; this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>!=0) {
 
1817
<a name="l01895"></a>01895          this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>;
1822
1818
<a name="l01896"></a>01896          ++relative_depth;
1823
1819
<a name="l01897"></a>01897          }
1824
1820
<a name="l01898"></a>01898       <span class="keywordflow">if</span>(relative_depth&lt;0) {
1849
1845
<a name="l01923"></a>01923    }
1850
1846
<a name="l01924"></a>01924 
1851
1847
<a name="l01925"></a>01925 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1852
 
<a name="l01926"></a>01926 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator</a>&amp; <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator::operator--</a>()
 
1848
<a name="l01926"></a><a class="code" href="classtree_1_1fixed__depth__iterator.html#39a2c5b5048ec0dfff33fbb55bd7767e">01926</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator</a>&amp; <a class="code" href="classtree_1_1fixed__depth__iterator.html#39a2c5b5048ec0dfff33fbb55bd7767e">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator::operator--</a>()
1853
1849
<a name="l01927"></a>01927    {
1854
1850
<a name="l01928"></a>01928    assert(this-&gt;node!=0);
1855
1851
<a name="l01929"></a>01929    <span class="keywordflow">if</span>(this-&gt;node-&gt;prev_sibling!=0) {
1856
 
<a name="l01930"></a>01930       this-&gt;node=this-&gt;node-&gt;prev_sibling;
 
1852
<a name="l01930"></a>01930       this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
1857
1853
<a name="l01931"></a>01931       assert(this-&gt;node!=0);
1858
1854
<a name="l01932"></a>01932       <span class="keywordflow">if</span>(this-&gt;node-&gt;parent==0 &amp;&amp; this-&gt;node-&gt;prev_sibling==0) <span class="comment">// head element</span>
1859
 
<a name="l01933"></a>01933          this-&gt;node=0;
 
1855
<a name="l01933"></a>01933          this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=0;
1860
1856
<a name="l01934"></a>01934       }
1861
1857
<a name="l01935"></a>01935    <span class="keywordflow">else</span> {
1862
 
<a name="l01936"></a>01936       <a class="code" href="classtree.html#ce325844a601660acbe7687991f8a225">tree_node</a> *par=this-&gt;node-&gt;parent;
 
1858
<a name="l01936"></a>01936       <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> *par=this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<a class="code" href="classtree__node__.html#60597bf2f8288fdd616c52f8a5a4e477">parent</a>;
1863
1859
<a name="l01937"></a>01937       <span class="keywordflow">do</span> {
1864
 
<a name="l01938"></a>01938          par=par-&gt;prev_sibling;
 
1860
<a name="l01938"></a>01938          par=par-&gt;<a class="code" href="classtree__node__.html#e7b8325f91c0b4460552cef6b9aec159">prev_sibling</a>;
1865
1861
<a name="l01939"></a>01939          <span class="keywordflow">if</span>(par==0) { <span class="comment">// FIXME: need to keep track of this!</span>
1866
 
<a name="l01940"></a>01940             this-&gt;node=0;
 
1862
<a name="l01940"></a>01940             this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=0;
1867
1863
<a name="l01941"></a>01941             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1868
1864
<a name="l01942"></a>01942             }
1869
 
<a name="l01943"></a>01943          } <span class="keywordflow">while</span>(par-&gt;last_child==0);
1870
 
<a name="l01944"></a>01944       this-&gt;node=par-&gt;last_child;
 
1865
<a name="l01943"></a>01943          } <span class="keywordflow">while</span>(par-&gt;<a class="code" href="classtree__node__.html#611d3c41c716dae6bf2012e3d9152933">last_child</a>==0);
 
1866
<a name="l01944"></a>01944       this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=par-&gt;<a class="code" href="classtree__node__.html#611d3c41c716dae6bf2012e3d9152933">last_child</a>;
1871
1867
<a name="l01945"></a>01945       }
1872
1868
<a name="l01946"></a>01946    <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1873
1869
<a name="l01947"></a>01947 }
1874
1870
<a name="l01948"></a>01948 
1875
1871
<a name="l01949"></a>01949 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1876
 
<a name="l01950"></a>01950 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator</a> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator::operator++</a>(<span class="keywordtype">int</span>)
 
1872
<a name="l01950"></a><a class="code" href="classtree_1_1fixed__depth__iterator.html#f1a1bf2404498a385611f938c2d6a750">01950</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator</a> <a class="code" href="classtree_1_1fixed__depth__iterator.html#71bcee62caa033974d5c0d94ab0dc0c6">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator::operator++</a>(<span class="keywordtype">int</span>)
1877
1873
<a name="l01951"></a>01951    {
1878
 
<a name="l01952"></a>01952    fixed_depth_iterator copy = *<span class="keyword">this</span>;
 
1874
<a name="l01952"></a>01952    <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> copy = *<span class="keyword">this</span>;
1879
1875
<a name="l01953"></a>01953    ++(*this);
1880
1876
<a name="l01954"></a>01954    <span class="keywordflow">return</span> copy;
1881
1877
<a name="l01955"></a>01955    }
1882
1878
<a name="l01956"></a>01956 
1883
1879
<a name="l01957"></a>01957 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1884
 
<a name="l01958"></a>01958 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator</a> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator::operator--</a>(<span class="keywordtype">int</span>)
 
1880
<a name="l01958"></a><a class="code" href="classtree_1_1fixed__depth__iterator.html#b404acdf3639ea5e5ce2ae65b77b94c7">01958</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator</a> <a class="code" href="classtree_1_1fixed__depth__iterator.html#39a2c5b5048ec0dfff33fbb55bd7767e">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator::operator--</a>(<span class="keywordtype">int</span>)
1885
1881
<a name="l01959"></a>01959 {
1886
 
<a name="l01960"></a>01960   fixed_depth_iterator copy = *<span class="keyword">this</span>;
 
1882
<a name="l01960"></a>01960   <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> copy = *<span class="keyword">this</span>;
1887
1883
<a name="l01961"></a>01961   --(*this);
1888
1884
<a name="l01962"></a>01962   <span class="keywordflow">return</span> copy;
1889
1885
<a name="l01963"></a>01963 }
1890
1886
<a name="l01964"></a>01964 
1891
1887
<a name="l01965"></a>01965 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1892
 
<a name="l01966"></a>01966 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator</a>&amp; <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator::operator-=</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num)
 
1888
<a name="l01966"></a><a class="code" href="classtree_1_1fixed__depth__iterator.html#e8ccf119ae29e96044d9a4eeca2a539d">01966</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator</a>&amp; <a class="code" href="classtree_1_1fixed__depth__iterator.html#e8ccf119ae29e96044d9a4eeca2a539d">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator::operator-=</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num)
1893
1889
<a name="l01967"></a>01967    {
1894
1890
<a name="l01968"></a>01968    <span class="keywordflow">while</span>(num&gt;0) {
1895
1891
<a name="l01969"></a>01969       --(*this);
1899
1895
<a name="l01973"></a>01973    }
1900
1896
<a name="l01974"></a>01974 
1901
1897
<a name="l01975"></a>01975 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1902
 
<a name="l01976"></a>01976 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator</a>&amp; <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator::operator+=</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num)
 
1898
<a name="l01976"></a><a class="code" href="classtree_1_1fixed__depth__iterator.html#6909c400794c6feb49d75b99dbf6aa00">01976</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator</a>&amp; <a class="code" href="classtree_1_1fixed__depth__iterator.html#6909c400794c6feb49d75b99dbf6aa00">tree&lt;T, tree_node_allocator&gt;::fixed_depth_iterator::operator+=</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num)
1903
1899
<a name="l01977"></a>01977    {
1904
1900
<a name="l01978"></a>01978    <span class="keywordflow">while</span>(num&gt;0) {
1905
1901
<a name="l01979"></a>01979       ++(*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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1917
 
<a name="l01991"></a>01991 <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1924
 
<a name="l01998"></a>01998 <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1931
 
<a name="l02005"></a>02005 <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::sibling_iterator::sibling_iterator</a>(<span class="keyword">const</span> iterator_base&amp; 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&lt;T, tree_node_allocator&gt;::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>&amp; 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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1938
 
<a name="l02012"></a>02012 <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::sibling_iterator::sibling_iterator</a>(<span class="keyword">const</span> sibling_iterator&amp; 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&lt;T, tree_node_allocator&gt;::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>&amp; 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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1944
1940
<a name="l02018"></a>02018 <span class="keywordtype">void</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::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-&gt;node==0) <span class="keywordflow">return</span>;
1948
1944
<a name="l02022"></a>02022    <span class="keywordflow">if</span>(this-&gt;node-&gt;parent!=0)
1949
 
<a name="l02023"></a>02023       parent_=this-&gt;node-&gt;parent;
 
1945
<a name="l02023"></a>02023       <a class="code" href="classtree_1_1sibling__iterator.html#204f7449ee908f982d21cc3d334d25bc">parent_</a>=this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1953
 
<a name="l02027"></a>02027 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::sibling_iterator</a>&amp; <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::sibling_iterator</a>&amp; <a class="code" href="classtree_1_1sibling__iterator.html#8d0d647a7843432b5ccc18724fcc3493">tree&lt;T, tree_node_allocator&gt;::sibling_iterator::operator++</a>()
1954
1950
<a name="l02028"></a>02028    {
1955
1951
<a name="l02029"></a>02029    <span class="keywordflow">if</span>(this-&gt;node)
1956
 
<a name="l02030"></a>02030       this-&gt;node=this-&gt;node-&gt;next_sibling;
 
1952
<a name="l02030"></a>02030       this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1961
 
<a name="l02035"></a>02035 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::sibling_iterator</a>&amp; <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::sibling_iterator</a>&amp; <a class="code" href="classtree_1_1sibling__iterator.html#7e91377755da77acd20d5b9356f7498e">tree&lt;T, tree_node_allocator&gt;::sibling_iterator::operator--</a>()
1962
1958
<a name="l02036"></a>02036    {
1963
 
<a name="l02037"></a>02037    <span class="keywordflow">if</span>(this-&gt;node) this-&gt;node=this-&gt;node-&gt;prev_sibling;
 
1959
<a name="l02037"></a>02037    <span class="keywordflow">if</span>(this-&gt;node) this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=this-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>-&gt;<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-&gt;node=parent_-&gt;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-&gt;<a class="code" href="classtree_1_1iterator__base.html#8e012d9505968cd1b51afab5bb4f2bf0">node</a>=<a class="code" href="classtree_1_1sibling__iterator.html#204f7449ee908f982d21cc3d334d25bc">parent_</a>-&gt;<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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1972
 
<a name="l02046"></a>02046 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::sibling_iterator</a> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::sibling_iterator</a> <a class="code" href="classtree_1_1sibling__iterator.html#8d0d647a7843432b5ccc18724fcc3493">tree&lt;T, tree_node_allocator&gt;::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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1980
 
<a name="l02054"></a>02054 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::sibling_iterator</a> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::sibling_iterator</a> <a class="code" href="classtree_1_1sibling__iterator.html#7e91377755da77acd20d5b9356f7498e">tree&lt;T, tree_node_allocator&gt;::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> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1988
 
<a name="l02062"></a>02062 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::sibling_iterator</a>&amp; <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::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&lt;T, tree_node_allocator&gt;::sibling_iterator</a>&amp; <a class="code" href="classtree_1_1sibling__iterator.html#d36b6994a50c0f73154b08ab35abf336">tree&lt;T, tree_node_allocator&gt;::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&gt;0) {
1991
1987
<a name="l02065"></a>02065       ++(*this);
1995
1991
<a name="l02069"></a>02069    }
1996
1992
<a name="l02070"></a>02070 
1997
1993
<a name="l02071"></a>02071 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
1998
 
<a name="l02072"></a>02072 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::sibling_iterator</a>&amp; <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::sibling_iterator::operator-=</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num)
 
1994
<a name="l02072"></a><a class="code" href="classtree_1_1sibling__iterator.html#f7b0a37317400fe16a1ad422c1ee6fa1">02072</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::sibling_iterator</a>&amp; <a class="code" href="classtree_1_1sibling__iterator.html#f7b0a37317400fe16a1ad422c1ee6fa1">tree&lt;T, tree_node_allocator&gt;::sibling_iterator::operator-=</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num)
1999
1995
<a name="l02073"></a>02073    {
2000
1996
<a name="l02074"></a>02074    <span class="keywordflow">while</span>(num&gt;0) {
2001
1997
<a name="l02075"></a>02075       --(*this);
2005
2001
<a name="l02079"></a>02079    }
2006
2002
<a name="l02080"></a>02080 
2007
2003
<a name="l02081"></a>02081 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
2008
 
<a name="l02082"></a>02082 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::tree_node</a> *<a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::sibling_iterator::range_first</a>()<span class="keyword"> const</span>
 
2004
<a name="l02082"></a><a class="code" href="classtree_1_1sibling__iterator.html#faed5294cdf5a6679c788fff0196c2a8">02082</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::tree_node</a> *<a class="code" href="classtree_1_1sibling__iterator.html#faed5294cdf5a6679c788fff0196c2a8">tree&lt;T, tree_node_allocator&gt;::sibling_iterator::range_first</a>()<span class="keyword"> const</span>
2009
2005
<a name="l02083"></a>02083 <span class="keyword">   </span>{
2010
 
<a name="l02084"></a>02084    <a class="code" href="classtree.html#ce325844a601660acbe7687991f8a225">tree_node</a> *tmp=parent_-&gt;first_child;
 
2006
<a name="l02084"></a>02084    <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_1_1sibling__iterator.html#204f7449ee908f982d21cc3d334d25bc">parent_</a>-&gt;<a class="code" href="classtree__node__.html#d51591496e654515b662095f70d1fc1a">first_child</a>;
2011
2007
<a name="l02085"></a>02085    <span class="keywordflow">return</span> tmp;
2012
2008
<a name="l02086"></a>02086    }
2013
2009
<a name="l02087"></a>02087 
2014
2010
<a name="l02088"></a>02088 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> tree_node_allocator&gt;
2015
 
<a name="l02089"></a>02089 <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::tree_node</a> *<a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::sibling_iterator::range_last</a>()<span class="keyword"> const</span>
 
2011
<a name="l02089"></a><a class="code" href="classtree_1_1sibling__iterator.html#85438655c23ba60d2a4f83787e3dcf48">02089</a> <span class="keyword">typename</span> <a class="code" href="classtree.html">tree&lt;T, tree_node_allocator&gt;::tree_node</a> *<a class="code" href="classtree_1_1sibling__iterator.html#85438655c23ba60d2a4f83787e3dcf48">tree&lt;T, tree_node_allocator&gt;::sibling_iterator::range_last</a>()<span class="keyword"> const</span>
2016
2012
<a name="l02090"></a>02090 <span class="keyword">   </span>{
2017
 
<a name="l02091"></a>02091    <span class="keywordflow">return</span> parent_-&gt;last_child;
 
2013
<a name="l02091"></a>02091    <span class="keywordflow">return</span> <a class="code" href="classtree_1_1sibling__iterator.html#204f7449ee908f982d21cc3d334d25bc">parent_</a>-&gt;<a class="code" href="classtree__node__.html#611d3c41c716dae6bf2012e3d9152933">last_child</a>;
2018
2014
<a name="l02092"></a>02092    }
2019
2015
<a name="l02093"></a>02093 
2020
2016
<a name="l02094"></a>02094 
2023
2019
<a name="l02097"></a>02097 <span class="comment">// Local variables:</span>
2024
2020
<a name="l02098"></a>02098 <span class="comment">// default-tab-width: 3</span>
2025
2021
<a name="l02099"></a>02099 <span class="comment">// End:</span>
2026
 
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Aug 25 13:25:22 2006 for LibOFX by&nbsp;
 
2022
</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Mon Nov 19 20:27:59 2007 for LibOFX by&nbsp;
2027
2023
<a href="http://www.doxygen.org/index.html">
2028
 
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
 
2024
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
2029
2025
</body>
2030
2026
</html>