[xsd-users] Feature request: c++11 support for
examples/cxx/tree/streaming/parser.hxx
Erik Sjölund
erik.sjolund at gmail.com
Sun Dec 14 03:24:17 EST 2014
I have successfully been using these files
examples/cxx/tree/streaming/serializer.cxx
examples/cxx/tree/streaming/serializer.hxx
examples/cxx/tree/streaming/parser.cxx
examples/cxx/tree/streaming/parser.hxx
when writing some software project. They can be really useful.
For the rest of the project I am defining the XSD_CXX11 macro, so I
thought it would be a good idea to adjust the files above to start
using std::unique_ptr.
It would be nice if the attached patch (or something similar) could be
merged into CodeSynthesis XSD. The patch is in public domain, so use
it in whatever way you like.
cheers,
Erik Sjölund
-------------- next part --------------
diff -ur old/xsd-4.0.0-x86_64-linux-gnu/examples/cxx/tree/streaming/parser.cxx new/xsd-4.0.0-x86_64-linux-gnu/examples/cxx/tree/streaming/parser.cxx
--- old/xsd-4.0.0-x86_64-linux-gnu/examples/cxx/tree/streaming/parser.cxx 2014-07-04 08:39:29.000000000 +0200
+++ new/xsd-4.0.0-x86_64-linux-gnu/examples/cxx/tree/streaming/parser.cxx 2014-12-14 08:52:58.882259596 +0100
@@ -14,8 +14,6 @@
#include <xercesc/validators/common/Grammar.hpp> // xercesc::Grammar
#include <xercesc/framework/XMLGrammarPoolImpl.hpp>
-#include <xsd/cxx/auto-array.hxx>
-
#include <xsd/cxx/xml/sax/std-input-source.hxx>
#include <xsd/cxx/xml/sax/bits/error-handler-proxy.hxx>
@@ -189,9 +187,9 @@
}
if (!r)
- return document_ptr (0);
+ return document_ptr (nullptr);
- return doc_;
+ return std::move(doc_);
}
document_ptr parser_impl::
@@ -207,14 +205,14 @@
{
// Copy doc to outer_doc.
//
- doc_ = outer_doc;
+ doc_ = std::move(outer_doc);
cur_ = static_cast<DOMElement*> (
doc_->importNode (doc->getDocumentElement (), true));
doc_->getDocumentElement ()->appendChild (cur_);
}
else
{
- doc_ = doc;
+ doc_ = std::move(doc);
cur_ = doc_->getDocumentElement ();
}
@@ -225,7 +223,7 @@
if (depth_ != next_depth_)
{
peek_ = false;
- return doc_;
+ return std::move(doc_);
}
}
@@ -250,7 +248,7 @@
}
if (!r)
- return document_ptr (0);
+ return document_ptr (nullptr);
// If we are not at our start depth, keep calling parseNext() until we
// get there again.
@@ -262,9 +260,9 @@
}
if (!r)
- return document_ptr (0);
+ return document_ptr (nullptr);
- return doc_;
+ return std::move(doc_);
}
// DOM builder.
@@ -368,5 +366,5 @@
document_ptr parser::
next (document_ptr doc, document_ptr outer_doc)
{
- return impl_->next (doc, outer_doc);
+ return impl_->next (std::move(doc), std::move(outer_doc));
}
diff -ur old/xsd-4.0.0-x86_64-linux-gnu/examples/cxx/tree/streaming/parser.hxx new/xsd-4.0.0-x86_64-linux-gnu/examples/cxx/tree/streaming/parser.hxx
--- old/xsd-4.0.0-x86_64-linux-gnu/examples/cxx/tree/streaming/parser.hxx 2014-07-04 07:20:37.000000000 +0200
+++ new/xsd-4.0.0-x86_64-linux-gnu/examples/cxx/tree/streaming/parser.hxx 2014-08-09 16:11:45.528305058 +0200
@@ -26,7 +26,7 @@
void
start (std::istream& is, const std::string& id, bool validate);
- typedef xsd::cxx::xml::dom::auto_ptr<xercesc::DOMDocument> document_ptr;
+ typedef XSD_DOM_AUTO_PTR<xercesc::DOMDocument> document_ptr;
// The peek function parses just the next element (ignoring any
// preceding content assuming it is whitespace) without parsing
@@ -61,7 +61,7 @@
operator= (const parser&);
private:
- std::auto_ptr<parser_impl> impl_;
+ std::unique_ptr<parser_impl> impl_;
};
#endif // PARSER_HXX
diff -ur old/xsd-4.0.0-x86_64-linux-gnu/examples/cxx/tree/streaming/serializer.cxx new/xsd-4.0.0-x86_64-linux-gnu/examples/cxx/tree/streaming/serializer.cxx
--- old/xsd-4.0.0-x86_64-linux-gnu/examples/cxx/tree/streaming/serializer.cxx 2014-07-04 11:00:46.000000000 +0200
+++ new/xsd-4.0.0-x86_64-linux-gnu/examples/cxx/tree/streaming/serializer.cxx 2014-08-08 22:30:04.074777408 +0200
@@ -352,10 +352,10 @@
create (const string& ns, const string& qname, const namespace_infomap&);
void
- serialize (xml::dom::auto_ptr<DOMElement>);
+ serialize (XSD_DOM_AUTO_PTR<DOMElement>);
void
- serialize_open (xml::dom::auto_ptr<DOMElement>);
+ serialize_open (XSD_DOM_AUTO_PTR<DOMElement>);
void
serialize_close (const string&);
@@ -369,8 +369,8 @@
// Serializer.
//
- xml::dom::auto_ptr<DOMLSOutput> out_;
- xml::dom::auto_ptr<StreamingDOMSerializer> serializer_;
+ XSD_DOM_AUTO_PTR<DOMLSOutput> out_;
+ XSD_DOM_AUTO_PTR<StreamingDOMSerializer> serializer_;
auto_ptr<xml::dom::ostream_format_target> oft_;
@@ -380,7 +380,7 @@
// DOM document that we use to create the elements.
//
DOMImplementation& dom_impl_;
- xml::dom::auto_ptr<DOMDocument> doc_;
+ XSD_DOM_AUTO_PTR<DOMDocument> doc_;
vector<DOMElement*> element_stack_;
size_t element_count_; // Number of elements serialized using current doc.
@@ -460,7 +460,7 @@
}
void serializer_impl::
-serialize (xml::dom::auto_ptr<DOMElement> p)
+serialize (XSD_DOM_AUTO_PTR<DOMElement> p)
{
DOMElement* e (p.get ());
@@ -486,7 +486,7 @@
}
void serializer_impl::
-serialize_open (xml::dom::auto_ptr<DOMElement> p)
+serialize_open (XSD_DOM_AUTO_PTR<DOMElement> p)
{
DOMElement* e (p.get ());
@@ -534,7 +534,7 @@
// internal heap. While Xerces-C++ DOM tries to re-use memory,
// it still accumulates no longer used memory blocks.
//
- xml::dom::auto_ptr<DOMDocument> doc (dom_impl_.createDocument ());
+ XSD_DOM_AUTO_PTR<DOMDocument> doc (dom_impl_.createDocument ());
if (!element_stack_.empty ())
{
@@ -551,7 +551,7 @@
}
}
- doc_ = doc;
+ doc_ = std::move(doc);
element_count_ = 0;
}
@@ -589,15 +589,15 @@
}
void serializer::
-serialize (xml::dom::auto_ptr<DOMElement> e)
+serialize (XSD_DOM_AUTO_PTR<DOMElement> e)
{
- impl_->serialize (e);
+ impl_->serialize (std::move(e));
}
void serializer::
-serialize_open (xml::dom::auto_ptr<DOMElement> e)
+serialize_open (XSD_DOM_AUTO_PTR<DOMElement> e)
{
- impl_->serialize_open (e);
+ impl_->serialize_open (std::move(e));
}
void serializer::
diff -ur old/xsd-4.0.0-x86_64-linux-gnu/examples/cxx/tree/streaming/serializer.hxx new/xsd-4.0.0-x86_64-linux-gnu/examples/cxx/tree/streaming/serializer.hxx
--- old/xsd-4.0.0-x86_64-linux-gnu/examples/cxx/tree/streaming/serializer.hxx 2014-01-23 07:05:55.000000000 +0100
+++ new/xsd-4.0.0-x86_64-linux-gnu/examples/cxx/tree/streaming/serializer.hxx 2014-08-09 13:07:15.860039592 +0200
@@ -102,45 +102,45 @@
const namespace_infomap&);
void
- serialize (xsd::cxx::xml::dom::auto_ptr<xercesc::DOMElement>);
+ serialize (XSD_DOM_AUTO_PTR<xercesc::DOMElement>);
void
- serialize_open (xsd::cxx::xml::dom::auto_ptr<xercesc::DOMElement>);
+ serialize_open (XSD_DOM_AUTO_PTR<xercesc::DOMElement>);
void
serialize_close (const std::string& name);
private:
- std::auto_ptr<serializer_impl> impl_;
+ std::unique_ptr<serializer_impl> impl_;
};
template <typename T>
inline void serializer::
next (const std::string& name, const T& x)
{
- xsd::cxx::xml::dom::auto_ptr<xercesc::DOMElement> e (
+ XSD_DOM_AUTO_PTR<xercesc::DOMElement> e (
create (name, namespace_infomap ()));
*e << x;
- serialize (e);
+ serialize (std::move(e));
}
template <typename T>
inline void serializer::
next (const std::string& name, const namespace_infomap& map, const T& x)
{
- xsd::cxx::xml::dom::auto_ptr<xercesc::DOMElement> e (create (name, map));
+ XSD_DOM_AUTO_PTR<xercesc::DOMElement> e (create (name, map));
*e << x;
- serialize (e);
+ serialize (std::move(e));
}
template <typename T>
inline void serializer::
next (const std::string& ns, const std::string& name, const T& x)
{
- xsd::cxx::xml::dom::auto_ptr<xercesc::DOMElement> e (
+ XSD_DOM_AUTO_PTR<xercesc::DOMElement> e (
create (ns, name, namespace_infomap ()));
*e << x;
- serialize (e);
+ serialize (std::move(e));
}
template <typename T>
@@ -150,38 +150,38 @@
const namespace_infomap& map,
const T& x)
{
- xsd::cxx::xml::dom::auto_ptr<xercesc::DOMElement> e (create (ns, name, map));
+ XSD_DOM_AUTO_PTR<xercesc::DOMElement> e (create (ns, name, map));
*e << x;
- serialize (e);
+ serialize (std::move(e));
}
template <typename T>
inline void serializer::
next_open (const std::string& name, const T& x)
{
- xsd::cxx::xml::dom::auto_ptr<xercesc::DOMElement> e (
+ XSD_DOM_AUTO_PTR<xercesc::DOMElement> e (
create (name, namespace_infomap ()));
*e << x;
- serialize_open (e);
+ serialize_open (std::move(e));
}
template <typename T>
inline void serializer::
next_open (const std::string& name, const namespace_infomap& map, const T& x)
{
- xsd::cxx::xml::dom::auto_ptr<xercesc::DOMElement> e (create (name, map));
+ XSD_DOM_AUTO_PTR<xercesc::DOMElement> e (create (name, map));
*e << x;
- serialize_open (e);
+ serialize_open (std::move(e));
}
template <typename T>
inline void serializer::
next_open (const std::string& ns, const std::string& name, const T& x)
{
- xsd::cxx::xml::dom::auto_ptr<xercesc::DOMElement> e (
+ XSD_DOM_AUTO_PTR<xercesc::DOMElement> e (
create (ns, name, namespace_infomap ()));
*e << x;
- serialize_open (e);
+ serialize_open (std::move(e));
}
template <typename T>
@@ -191,9 +191,9 @@
const namespace_infomap& map,
const T& x)
{
- xsd::cxx::xml::dom::auto_ptr<xercesc::DOMElement> e (create (ns, name, map));
+ XSD_DOM_AUTO_PTR<xercesc::DOMElement> e (create (ns, name, map));
*e << x;
- serialize_open (e);
+ serialize_open (std::move(e));
}
inline void serializer::
More information about the xsd-users
mailing list