diff options
Diffstat (limited to 'xsd/examples/cxx/tree/binary/boost/boost-archive-extraction.hxx')
-rw-r--r-- | xsd/examples/cxx/tree/binary/boost/boost-archive-extraction.hxx | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/xsd/examples/cxx/tree/binary/boost/boost-archive-extraction.hxx b/xsd/examples/cxx/tree/binary/boost/boost-archive-extraction.hxx new file mode 100644 index 0000000..7711b28 --- /dev/null +++ b/xsd/examples/cxx/tree/binary/boost/boost-archive-extraction.hxx @@ -0,0 +1,188 @@ +// file : examples/cxx/tree/binary/boost/boost-archive-insertion.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef BOOST_ARCHIVE_EXTRACTION_HXX +#define BOOST_ARCHIVE_EXTRACTION_HXX + +#include <cstddef> // std::size_t +#include <string> + +#include <xsd/cxx/tree/buffer.hxx> +#include <xsd/cxx/tree/istream.hxx> + +#include <boost/cstdint.hpp> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // as_size + // + template <typename Archive, typename T> + inline istream<Archive>& + operator>> (istream<Archive>& s, istream_common::as_size<T>& x) + { + std::size_t r; + s.impl () >> r; + x.x_ = static_cast<T> (r); + return s; + } + + // 8-bit + // + template <typename Archive, typename T> + inline istream<Archive>& + operator>> (istream<Archive>& s, istream_common::as_int8<T>& x) + { + boost::int8_t r; + s.impl () >> r; + x.x_ = static_cast<T> (r); + return s; + } + + template <typename Archive, typename T> + inline istream<Archive>& + operator>> (istream<Archive>& s, istream_common::as_uint8<T>& x) + { + boost::uint8_t r; + s.impl () >> r; + x.x_ = static_cast<T> (r); + return s; + } + + + // 16-bit + // + template <typename Archive, typename T> + inline istream<Archive>& + operator>> (istream<Archive>& s, istream_common::as_int16<T>& x) + { + boost::int16_t r; + s.impl () >> r; + x.x_ = static_cast<T> (r); + return s; + } + + template <typename Archive, typename T> + inline istream<Archive>& + operator>> (istream<Archive>& s, istream_common::as_uint16<T>& x) + { + boost::uint16_t r; + s.impl () >> r; + x.x_ = static_cast<T> (r); + return s; + } + + + // 32-bit + // + template <typename Archive, typename T> + inline istream<Archive>& + operator>> (istream<Archive>& s, istream_common::as_int32<T>& x) + { + boost::int32_t r; + s.impl () >> r; + x.x_ = static_cast<T> (r); + return s; + } + + template <typename Archive, typename T> + inline istream<Archive>& + operator>> (istream<Archive>& s, istream_common::as_uint32<T>& x) + { + boost::uint32_t r; + s.impl () >> r; + x.x_ = static_cast<T> (r); + return s; + } + + + // 64-bit + // + template <typename Archive, typename T> + inline istream<Archive>& + operator>> (istream<Archive>& s, istream_common::as_int64<T>& x) + { + boost::int64_t r; + s.impl () >> r; + x.x_ = static_cast<T> (r); + return s; + } + + template <typename Archive, typename T> + inline istream<Archive>& + operator>> (istream<Archive>& s, istream_common::as_uint64<T>& x) + { + boost::uint64_t r; + s.impl () >> r; + x.x_ = static_cast<T> (r); + return s; + } + + + // Boolean + // + template <typename Archive, typename T> + inline istream<Archive>& + operator>> (istream<Archive>& s, istream_common::as_bool<T>& x) + { + bool r; + s.impl () >> r; + x.x_ = static_cast<T> (r); + return s; + } + + + // Floating-point + // + template <typename Archive, typename T> + inline istream<Archive>& + operator>> (istream<Archive>& s, istream_common::as_float32<T>& x) + { + float r; + s.impl () >> r; + x.x_ = static_cast<T> (r); + return s; + } + + template <typename Archive, typename T> + inline istream<Archive>& + operator>> (istream<Archive>& s, istream_common::as_float64<T>& x) + { + double r; + s.impl () >> r; + x.x_ = static_cast<T> (r); + return s; + } + + // Extraction of std::basic_string. + // + + template <typename Archive, typename C> + inline istream<Archive>& + operator>> (istream<Archive>& s, std::basic_string<C>& x) + { + s.impl () >> x; + return s; + } + + + // Extraction of a binary buffer. + // + template <typename Archive, typename C> + istream<Archive>& + operator>> (istream<Archive>& s, buffer<C>& x) + { + std::size_t size; + s.impl () >> size; + x.size (size); + s.impl ().load_binary (x.data (), size); + } + } + } +} + +#endif // BOOST_ARCHIVE_EXTRACTION_HXX |