00001 #ifndef SCT_XMLSTYLESTREAM_H 00002 #define SCT_XMLSTYLESTREAM_H 00003 #include <sstream> 00004 #include "Sct/OStream.h" 00005 #include "Sct/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