From efb2476d01b2bcc62569c8748327754a836195c3 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 21 May 2010 17:27:15 +0200 Subject: Optimize enum representation in binary streams For string-based enums use integer representation instead of string when storing in binary streams. --- libxsd/xsd/cxx/tree/istream.hxx | 149 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) (limited to 'libxsd') diff --git a/libxsd/xsd/cxx/tree/istream.hxx b/libxsd/xsd/cxx/tree/istream.hxx index 2f8f8cb..07bba53 100644 --- a/libxsd/xsd/cxx/tree/istream.hxx +++ b/libxsd/xsd/cxx/tree/istream.hxx @@ -138,6 +138,52 @@ namespace xsd return s_; } + public: + // 8-bit + // + signed char + read_char (); + + unsigned char + read_uchar (); + + // 16-bit + // + unsigned short + read_short (); + + unsigned short + read_ushort (); + + // 32-bit + // + unsigned int + read_int (); + + unsigned int + read_uint (); + + // 64-bit + // + unsigned long long + read_ulonglong (); + + unsigned long long + read_longlong (); + + // Boolean + // + bool + read_bool (); + + // Floating-point + // + float + read_float (); + + double + read_double (); + private: istream (const istream&); istream& @@ -251,6 +297,109 @@ namespace xsd istream_common::as_float64 as_float64 (x); return s >> as_float64; } + + // + // read_* functions. + // + + template + inline signed char istream:: + read_char () + { + signed char r; + *this >> r; + return r; + } + + template + inline unsigned char istream:: + read_uchar () + { + unsigned char r; + *this >> r; + return r; + } + + template + inline unsigned short istream:: + read_short () + { + short r; + *this >> r; + return r; + } + + template + inline unsigned short istream:: + read_ushort () + { + unsigned short r; + *this >> r; + return r; + } + + template + inline unsigned int istream:: + read_int () + { + int r; + *this >> r; + return r; + } + + template + inline unsigned int istream:: + read_uint () + { + unsigned int r; + *this >> r; + return r; + } + + template + inline unsigned long long istream:: + read_ulonglong () + { + long long r; + *this >> r; + return r; + } + + template + inline unsigned long long istream:: + read_longlong () + { + unsigned long long r; + *this >> r; + return r; + } + + template + inline bool istream:: + read_bool () + { + bool r; + *this >> r; + return r; + } + + template + inline float istream:: + read_float () + { + float r; + *this >> r; + return r; + } + + template + inline double istream:: + read_double () + { + double r; + *this >> r; + return r; + } } } } -- cgit v1.1