diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2009-03-08 17:23:30 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2009-03-08 17:23:30 +0200 |
commit | 0bce70a0e483294b83b8bf9d5468838a63405612 (patch) | |
tree | d11afb4998d6980435c15c4df6e40b1979531672 /examples/cxx/hybrid/binary/custom/orawstream.txx | |
parent | 6c63b913179127e09ed7d9da8920493ccceec6ce (diff) |
Add support for binary representations
xsde/cxx/hybrid/insertion-*: insertion operators generator
xsde/cxx/hybrid/extraction-*: extraction operators generator
libxsde/xsde/cxx/hybrid/cdr/: CDR support code
libxsde/xsde/cxx/hybrid/xdr/: XDR support code
tests/cxx/hybrid/binary/: new tests
examples/cxx/hybrid/binary/: new examples
documentation/cxx/hybrid/guide/: new chapter
Diffstat (limited to 'examples/cxx/hybrid/binary/custom/orawstream.txx')
-rw-r--r-- | examples/cxx/hybrid/binary/custom/orawstream.txx | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/examples/cxx/hybrid/binary/custom/orawstream.txx b/examples/cxx/hybrid/binary/custom/orawstream.txx new file mode 100644 index 0000000..46c5b71 --- /dev/null +++ b/examples/cxx/hybrid/binary/custom/orawstream.txx @@ -0,0 +1,47 @@ +// file : examples/cxx/hybrid/binary/custom/orawostream.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <string.h> // memcpy + +template <typename T> +void +operator<< (orawstream& s, const xml_schema::pod_seq<T>& x) +{ + size_t n = x.size (); + + s << orawstream::as_size (x.size ()); + + if (n != 0) + { + size_t mn = sizeof (T) * n; + char* p = s.align (sizeof (T), mn); + memcpy (p, x.begin (), mn); + } +} + +template <typename T> +void +operator<< (orawstream& s, const xml_schema::fix_seq<T>& x) +{ + s << orawstream::as_size (x.size ()); + + for (typename xml_schema::fix_seq<T>::const_iterator i = x.begin (); + i != x.end (); ++i) + { + s << *i; + } +} + +template <typename T> +void +operator<< (orawstream& s, const xml_schema::var_seq<T>& x) +{ + s << orawstream::as_size (x.size ()); + + for (typename xml_schema::var_seq<T>::const_iterator i = x.begin (); + i != x.end (); ++i) + { + s << *i; + } +} |