$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Gustavo Guerra (gustavobt_at_[hidden])
Date: 2002-09-05 10:56:27
"Ronald Garcia" <garcia_at_[hidden]> wrote in message
news:3D76375C.4090101_at_cs.indiana.edu...
> Gustavo Guerra wrote:
>
> >Hi
> >Have you ever looked at pointainer from http://ootips.org/yonat/4dev/ ?
> >Could you comment on the different approaches used by your library, where
> >reference-count is inforced in the iterators, and pointainer, where
> >reference-count is inforced by container-wrappers?
> >
> >
> Greetings,
>
> Having quickly browsed the sparse documentation for pointainer, it looks
> to me like our libraries are altogether different beasts. A quick
> perusal of my documentation should clarify the difference.
>
Yes, you're right. Sorry. I got your library right, but misinterpreted
pointerator. What is was thinking pointerator was is the following, wich I
now ask you to compare to your solution:
I find it more easy to explain by an example.Your
shared_iterator_example3.cpp would become the following:
#include "boost/shared_container.hpp"
#include "boost/tuple/tuple.hpp"
#include <algorithm>
#include <iostream>
#include <vector>
typedef shared_container<std::vector<int> > ints;
std::pair<ints::iterator, ints::iterator>
return_range() {
ints range;
range.push_back(0);
range.push_back(1);
range.push_back(2);
range.push_back(3);
range.push_back(4);
range.push_back(5);
return make_pair(v.begin(); v.end());
}
int main() {
ints::iterator i, end;
boost::tie(i,end) = return_range();
std::copy(i,end,std::ostream_iterator<int>(std::cout,","));
std::cout.put('\n');
}
What do you think of this interface? It hides the shared_ptr from the user
and makes it more easy to use. Implementation-wise, it has the benefit that
you could use counted_base for intrusive reference counting, wich would be
more efficient. The corresponding iterators would include shared_ptr to the
shared container, much like your version. Of course this would be much more
harder to implement. A possible implementation would be to
shared_container<T> inherit from T and redefining all methods that return
iterators, requiring a little metaprogramming to know wich functions to
redefine depending on the type of the container.
Pros of your version: more simple and scalable. Pros of a pseudo-version
like I just described: more easy to use and maybe more efficient.
What do you think?
Regards
Gustavo Guerra