26 #ifndef MLN_UTIL_TREE_FAST_HH
27 # define MLN_UTIL_TREE_FAST_HH
30 # include <mln/core/contract.hh>
61 unsigned size()
const;
68 bool has (
T& elt)
const;
84 bool is_root (
unsigned i)
const;
107 std::vector<std::vector<unsigned> >
child_;
115 # ifndef MLN_INCLUDE_ONLY
117 template <
typename T>
123 template <
typename T>
127 std::vector<unsigned> v;
128 data_.push_back(elt);
129 parent_.push_back(0);
134 template <
typename T>
139 return (data_.size ());
143 template <
typename T>
148 for (
unsigned i = 0; i < data_.size (); ++i)
155 template <
typename T>
160 for (
unsigned i = 0; i < data_.size (); ++i)
165 mln_assertion (
false);
166 return (
unsigned)(-1);
169 template <
typename T>
177 template <
typename T>
182 mln_assertion (i < data_.size ());
183 std::vector<unsigned> v;
184 data_.push_back(elt);
185 parent_.push_back(i);
187 child_[i].push_back(data_.size () - 1);
188 return (data_.size () - 1);
191 template <
typename T>
196 data_.push_back(elt);
197 parent_.push_back(data_.size () - 1);
198 std::vector<unsigned> v;
201 parent_[root_] = data_.size () - 1;
202 root_ = data_.size () - 1;
203 return (data_.size () - 1);
209 # endif // ! MLN_INCLUDE_ONLY
216 #endif // ! MLN_UTIL_TREE_FAST_HH