Boost logo

Boost :

From: Hamish Mackenzie (hamish_at_[hidden])
Date: 2003-06-26 15:00:39


On Thu, 2003-06-26 at 19:51, Stefan Seefeld wrote:
> Hamish Mackenzie wrote:
>
> >>>>And I don't use a 'document' class, as that is managed implicitely
> >>>>by my dom::document_ptr:
> >>>>
> >>>>dom::document_ptr document; // create new document;
> >>>>dom::document_ptr doc(document); // create second reference to it
> >>>>dom::document_ptr doc2 = document.clone(); // clone it, i.e. make deep
> >>>> copy
> >>>
> >>>
> >>>This is not consistent with the standard library or C++ in general. It
> >>>will seem strange that the pointer class
> >>>1) Does not require dereferencing
> >>
> >>would you say the same if the class name was spelled 'document_ref'
> >>instead ?
> >
> >
> > 1 & 4 would be ok, but 3 would stand and having an 'operator bool' would
> > be added to the list.
> >
> >
> >>>3) Has a constructor such as document_ptr( "config.xml" )
> >>>4) Has member functions such as write_to_file
> >>>
> >>>The alternative would allow both...
> >>>
> >>>boost::shared_ptr< dom::document > doc( new dom::document() );
> >>>boost::shared_ptr< dom::document > doc1( doc );
> >>>dom::document doc2( *doc1 );
> >>>
> >>>and if the 'doc1' reference was non-owning...
> >>>
> >>>dom::document doc(); // Create new doc
> >>>dom::document & doc1( doc ); // Second reference
> >>>dom::document doc2( doc1 ); // Deep copy
> >>
> >>right, but given such an approach, what would nodes return in their
> >>'parent()' method ?
> >
> >
> > The parent is always an element (is that right?) so it would return
> > element_ptr or element_ref.
>
> yes. Sorry, I meant to ask what 'document()' would return.

Assuming xmlNode::doc cannot be null it would return document_ref.

You might be worried about...

dom::document dom;
assert( &dom.root().document() == &dom );

I think this can work be made to work with

bool operator ==( document * p1, document_ref * p2 )
{
  return p1->raw_ == p2->raw_;
}

bool operator ==( document_ref * p1, document * p2 )
{
  return p1->raw_ == p2->raw_;
}

etc.

-- 
Hamish Mackenzie <hamish_at_[hidden]>

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