00001 #ifndef SCT_XMLSTYLESTREAM_H
00002 #define SCT_XMLSTYLESTREAM_H
00003 #include <sstream>
00004 #include "OStream.h"
00005 #include "IStream.h"
00006
00007 namespace Sct{
00008
00009 class XmlStyleOStream : public OStream{
00010 public:
00011 XmlStyleOStream(std::ostream& out);
00012
00013 virtual ~XmlStyleOStream();
00014
00015 virtual XmlStyleOStream& operator<< ( const char * );
00016 virtual XmlStyleOStream& operator<< ( const unsigned char * );
00017 virtual XmlStyleOStream& operator<< ( bool );
00018 virtual XmlStyleOStream& operator<< ( char );
00019 virtual XmlStyleOStream& operator<< ( short );
00020 virtual XmlStyleOStream& operator<< ( int );
00021 virtual XmlStyleOStream& operator<< ( long );
00022 virtual XmlStyleOStream& operator<< ( unsigned char );
00023 virtual XmlStyleOStream& operator<< ( unsigned short );
00024 virtual XmlStyleOStream& operator<< ( unsigned int );
00025 virtual XmlStyleOStream& operator<< ( unsigned long );
00026 virtual XmlStyleOStream& operator<< ( float );
00027 virtual XmlStyleOStream& operator<< ( double );
00028 virtual XmlStyleOStream& operator<< ( const std::string & );
00029
00030 virtual XmlStyleOStream& put( const bool * , size_t );
00031 virtual XmlStyleOStream& put( const char * , size_t );
00032 virtual XmlStyleOStream& put( const short * , size_t );
00033 virtual XmlStyleOStream& put( const int * , size_t );
00034 virtual XmlStyleOStream& put( const long * , size_t );
00035 virtual XmlStyleOStream& put( const unsigned char * , size_t );
00036 virtual XmlStyleOStream& put( const unsigned short * , size_t );
00037 virtual XmlStyleOStream& put( const unsigned int * , size_t );
00038 virtual XmlStyleOStream& put( const unsigned long * , size_t );
00039 virtual XmlStyleOStream& put( const float * , size_t );
00040 virtual XmlStyleOStream& put( const double * , size_t );
00041 virtual XmlStyleOStream& put( const std::string * , size_t );
00042
00043 private:
00044 std::ostream& m_out;
00045 };
00046
00047 class XmlStyleIStream : public IStream {
00048 public:
00049 XmlStyleIStream( std::istream& is );
00050 virtual ~XmlStyleIStream( );
00051
00052 XmlStyleIStream& operator>> ( char * );
00053 XmlStyleIStream& operator>> ( char ** );
00054 XmlStyleIStream& operator>> ( unsigned char * );
00055 XmlStyleIStream& operator>> ( unsigned char ** );
00056 XmlStyleIStream& operator>> ( bool & );
00057 XmlStyleIStream& operator>> ( char & );
00058 XmlStyleIStream& operator>> ( short & );
00059 XmlStyleIStream& operator>> ( int & );
00060 XmlStyleIStream& operator>> ( long & );
00061 XmlStyleIStream& operator>> ( unsigned char & );
00062 XmlStyleIStream& operator>> ( unsigned short & );
00063 XmlStyleIStream& operator>> ( unsigned int & );
00064 XmlStyleIStream& operator>> ( unsigned long & );
00065 XmlStyleIStream& operator>> ( float & );
00066 XmlStyleIStream& operator>> ( double & );
00067 XmlStyleIStream& operator>> ( std::string & );
00068
00069 XmlStyleIStream& get( bool ** , size_t & );
00070 XmlStyleIStream& get( char ** , size_t & );
00071 XmlStyleIStream& get( short ** , size_t & );
00072 XmlStyleIStream& get( int ** , size_t & );
00073 XmlStyleIStream& get( long ** , size_t & );
00074 XmlStyleIStream& get( unsigned char ** , size_t & );
00075 XmlStyleIStream& get( unsigned short ** , size_t & );
00076 XmlStyleIStream& get( unsigned int ** , size_t & );
00077 XmlStyleIStream& get( unsigned long ** , size_t & );
00078 XmlStyleIStream& get( float ** , size_t & );
00079 XmlStyleIStream& get( double ** , size_t & );
00080 XmlStyleIStream& get( std::string ** , size_t & );
00081
00082 XmlStyleIStream& get( bool * const , const size_t );
00083 XmlStyleIStream& get( char * const , const size_t );
00084 XmlStyleIStream& get( short * const , const size_t );
00085 XmlStyleIStream& get( int * const , const size_t );
00086 XmlStyleIStream& get( long * const , const size_t );
00087 XmlStyleIStream& get( unsigned char * const , const size_t );
00088 XmlStyleIStream& get( unsigned short * const , const size_t );
00089 XmlStyleIStream& get( unsigned int * const , const size_t );
00090 XmlStyleIStream& get( unsigned long * const , const size_t );
00091 XmlStyleIStream& get( float * const , const size_t );
00092 XmlStyleIStream& get( double * const , const size_t );
00093 XmlStyleIStream& get( std::string * const , const size_t );
00094
00095 protected:
00096 void reset( );
00097 size_t entries( ) const;
00098 size_t readSize( ) const;
00099 bool isArray( ) const;
00100
00101 private:
00102 std::string data_;
00103 std::string::size_type count_;
00104 size_t entries_;
00105 };
00106 }
00107
00108 #endif // ISSTREAM_H