Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2005-11-22 15:04:08


"Peter Dimov" <pdimov_at_[hidden]> writes:

> all that needs to be done is:
>
> template<class Archive, class It>
> inline void save_sequence(Archive & ar, It it, unsigned count)
> {
> while(count-- > 0){
> //if(0 == (ar.get_flags() & boost::archive::no_object_creation))
> // note borland emits a no-op without the explicit namespace
> boost::serialization::save_construct_data_adl(ar, &(*it),
> 0U);
> ar << boost::serialization::make_nvp("item", *it++);
> }
> }
>
> template<class Archive, class Container>
> inline void save_collection(Archive & ar, const Container &s)
> {
> // record number of elements
> unsigned int count = s.size();
> ar << make_nvp("count", const_cast<const unsigned int &>(count));
> save_sequence( ar, s.begin(), count );
> }
>
> unless I'm missing something fundamental.
>
> So what's all the fuss about?

1. Robert has expressed deep reluctance to change any part of the
   existing library, which is why we're now presenting a design that
   avoids touching it.

2. This wouldn't work well for std::vector, since we know its elements
   are contiguous but we don't know that its iterators are pointers.
   Yes, I know there are some nasty hacks that will usually work for
   getting back to pointers, but they're nasty and don't always work.

3. An archive can normally only apply an array optimization to a
   particular subset of types. This subset varies by archive type and
   can usually be captured by a type trait such as is_POD or
   is_fundamental. We'd like to encapsulate that choice in a base
   class template that allows us to avoid writing complex dispatching
   logic in each array-optimized archive. Partial ordering rules make
   that impossible with the above design, because the save_sequence
   above will be a better match than one that operates on
   some_base<Archive>.

4. The fuss is really about what happens when you have a design that
   doesn't insert the equivalent of a save_sequence hook in the
   serialization library. It's a social/library-interoperability
   phenomenon that I haven't even had a chance to discuss yet -- and I
   really don't want to until Robert has had a chance to digest our
   design and understand where the speedups can come from.

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk