From f0510d2f90467de8e8f260b47d79a9baaf9bef17 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 17 Sep 2009 07:15:29 +0200 Subject: Start tracking XSD with git --- libxsd/xsd/cxx/tree/istream.hxx | 258 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 258 insertions(+) create mode 100644 libxsd/xsd/cxx/tree/istream.hxx (limited to 'libxsd/xsd/cxx/tree/istream.hxx') diff --git a/libxsd/xsd/cxx/tree/istream.hxx b/libxsd/xsd/cxx/tree/istream.hxx new file mode 100644 index 0000000..1d58e85 --- /dev/null +++ b/libxsd/xsd/cxx/tree/istream.hxx @@ -0,0 +1,258 @@ +// file : xsd/cxx/tree/istream.hxx +// author : Boris Kolpackov +// copyright : Copyright (c) 2005-2009 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_ISTREAM_HXX +#define XSD_CXX_TREE_ISTREAM_HXX + +#include // std::size_t + +#include + +namespace xsd +{ + namespace cxx + { + namespace tree + { + class istream_common + { + public: + template + struct as_size + { + explicit as_size (T& x) : x_ (x) {} + T& x_; + }; + + + // 8-bit + // + template + struct as_int8 + { + explicit as_int8 (T& x) : x_ (x) {} + T& x_; + }; + + template + struct as_uint8 + { + explicit as_uint8 (T& x) : x_ (x) {} + T& x_; + }; + + + // 16-bit + // + template + struct as_int16 + { + explicit as_int16 (T& x) : x_ (x) {} + T& x_; + }; + + template + struct as_uint16 + { + explicit as_uint16 (T& x) : x_ (x) {} + T& x_; + }; + + + // 32-bit + // + template + struct as_int32 + { + explicit as_int32 (T& x) : x_ (x) {} + T& x_; + }; + + template + struct as_uint32 + { + explicit as_uint32 (T& x) : x_ (x) {} + T& x_; + }; + + + // 64-bit + // + template + struct as_int64 + { + explicit as_int64 (T& x) : x_ (x) {} + T& x_; + }; + + template + struct as_uint64 + { + explicit as_uint64 (T& x) : x_ (x) {} + T& x_; + }; + + + // Boolean + // + template + struct as_bool + { + explicit as_bool (T& x) : x_ (x) {} + T& x_; + }; + + + // Floating-point + // + template + struct as_float32 + { + explicit as_float32 (T& x) : x_ (x) {} + T& x_; + }; + + template + struct as_float64 + { + explicit as_float64 (T& x) : x_ (x) {} + T& x_; + }; + }; + + template + class istream: public istream_common + { + public: + explicit + istream (S& s) + : s_ (s) + { + } + + S& + impl () + { + return s_; + } + + private: + istream (const istream&); + istream& + operator= (const istream&); + + private: + S& s_; + }; + + + // 8-bit + // + template + inline istream& + operator>> (istream& s, signed char& x) + { + istream_common::as_int8 as_int8 (x); + return s >> as_int8; + } + + template + inline istream& + operator>> (istream& s, unsigned char& x) + { + istream_common::as_uint8 as_uint8 (x); + return s >> as_uint8; + } + + + // 16-bit + // + template + inline istream& + operator>> (istream& s, short& x) + { + istream_common::as_int16 as_int16 (x); + return s >> as_int16; + } + + template + inline istream& + operator>> (istream& s, unsigned short& x) + { + istream_common::as_uint16 as_uint16 (x); + return s >> as_uint16; + } + + + // 32-bit + // + template + inline istream& + operator>> (istream& s, int& x) + { + istream_common::as_int32 as_int32 (x); + return s >> as_int32; + } + + template + inline istream& + operator>> (istream& s, unsigned int& x) + { + istream_common::as_uint32 as_uint32 (x); + return s >> as_uint32; + } + + + // 64-bit + // + template + inline istream& + operator>> (istream& s, long long& x) + { + istream_common::as_int64 as_int64 (x); + return s >> as_int64; + } + + template + inline istream& + operator>> (istream& s, unsigned long long& x) + { + istream_common::as_uint64 as_uint64 (x); + return s >> as_uint64; + } + + // Boolean + // + template + inline istream& + operator>> (istream& s, bool& x) + { + istream_common::as_bool as_bool (x); + return s >> as_bool; + } + + + // Floating-point + // + template + inline istream& + operator>> (istream& s, float& x) + { + istream_common::as_float32 as_float32 (x); + return s >> as_float32; + } + + template + inline istream& + operator>> (istream& s, double& x) + { + istream_common::as_float64 as_float64 (x); + return s >> as_float64; + } + } + } +} + +#endif // XSD_CXX_TREE_ISTREAM_HXX -- cgit v1.1