$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: christopher diggins (cdiggins_at_[hidden])
Date: 2005-02-24 13:44:34
----- Original Message ----- 
From: "Joao Abecasis" <jpabecasis_at_[hidden]>
> Thorsten Ottosen wrote:
>> I'm not to keen on the idea that iterators are parameterized with an 
>> iteration policy.
>> It would be more natural just to have
>>
>> tree_t::inorder_iterator i = tr.inorder_begin();
>> tree_t::preorder_iterator i2 = tr.preorder_begin();
>
> I think a generic tree should only be required to provide basic tree 
> traversal iterators like from parent to child and among children or 
> siblings.
>
> From the basic iterators other types of traversal are possible. In my 
> unfinished tree library (see my other post) the same effect would be 
> accomplished with:
>
>     inorder_iterator<tree_t::tree_iterator> i = tr.root();
>     preorder_iterator<tree_t::tree_iterator> i2 = tr.root();
>
> This keeps the interface and the implementation of the tree cleaner. One 
> could also use BGL algorithms here if the tree exposes a Graph interface.
Why not have just one kind of iterator:
template<typename T, typename Iter_T>
struct tree {
  typedef typename Iter_T iterator;
  iterator preorder_begin();
  iterator postorder_end();
  iterator inorder_end();
  iterator end();
  iterator begin(); // calls inorder_begin()
}
?
Christopher Diggins
Object Oriented Template Library (OOTL)
http://www.ootl.org