summaryrefslogtreecommitdiff
path: root/libxsd/xsd/cxx/tree/stream-extraction.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'libxsd/xsd/cxx/tree/stream-extraction.hxx')
-rw-r--r--libxsd/xsd/cxx/tree/stream-extraction.hxx16
1 files changed, 10 insertions, 6 deletions
diff --git a/libxsd/xsd/cxx/tree/stream-extraction.hxx b/libxsd/xsd/cxx/tree/stream-extraction.hxx
index b55afa0..ee39bcc 100644
--- a/libxsd/xsd/cxx/tree/stream-extraction.hxx
+++ b/libxsd/xsd/cxx/tree/stream-extraction.hxx
@@ -28,12 +28,18 @@ namespace xsd
// simple_type
//
- template <typename B>
+ template <typename C, typename B>
template <typename S>
- inline simple_type<B>::
+ inline simple_type<C, B>::
simple_type (istream<S>& s, flags f, container* c)
- : type (s, f, c)
+ : type (s, f & ~flags::extract_content, c)
{
+ if (f & flags::extract_content)
+ {
+ std::basic_string<C> t;
+ s >> t;
+ this->content_.reset (new text_content_type (t));
+ }
}
// fundamental_base
@@ -65,9 +71,7 @@ namespace xsd
this->reserve (size);
while (size--)
- {
- this->push_back (XSD_AUTO_PTR<T> (new T (s, f, c)));
- }
+ this->push_back (traits<T, C, ST>::create (s, f, c));
}
}