00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef _MPCL_IO_INPUT_STREAMABLE__
00027 #define _MPCL_IO_INPUT_STREAMABLE__
00028
00029 #include <istream>
00030
00031
00033 namespace mpcl
00034 {
00035
00037 namespace io
00038 {
00039
00041 template <typename TChar, typename TTraits>
00042 class IInputStreamable;
00043
00048 template <typename TChar, typename TTraits>
00049 std::basic_istream<TChar, TTraits>&
00050 operator >> ( std::basic_istream<TChar, TTraits>& rtSOURCE_ISTREAM ,
00051 IInputStreamable<TChar, TTraits>& rtTARGET_INPUT_STREAMABLE );
00052
00054 template < typename TChar = char ,
00055 typename TTraits = std::char_traits<TChar> >
00056 class IInputStreamable
00057 {
00058
00059 public:
00060
00062 typedef
00063 TChar
00064 char_type;
00065
00067 typedef
00068 TTraits
00069 traits_type;
00070
00071
00072 public:
00073
00074
00075
00076
00077
00079 virtual ~IInputStreamable (void) {}
00080
00081
00082 protected:
00083
00084
00085
00086
00087
00092 virtual void read (std::basic_istream<char_type, traits_type>& rtISTREAM) = 0;
00093
00094
00095 public:
00096
00097
00098
00099
00100
00105 friend std::basic_istream<TChar, TTraits>&
00106 operator >> <TChar, TTraits>
00107 (
00108 std::basic_istream<TChar, TTraits>& rtSOURCE_ISTREAM ,
00109 IInputStreamable<TChar, TTraits>& rtTARGET_INPUT_STREAMABLE
00110 );
00111
00112 };
00113
00114
00115
00116
00117
00118
00119 template <typename TChar, typename TTraits>
00120 std::basic_istream<TChar, TTraits>&
00121 operator >> ( std::basic_istream<TChar, TTraits>& rtSOURCE_ISTREAM ,
00122 IInputStreamable<TChar, TTraits>& rtTARGET_INPUT_STREAMABLE )
00123 {
00124 rtTARGET_INPUT_STREAMABLE.read (rtSOURCE_ISTREAM);
00125 return rtSOURCE_ISTREAM;
00126 }
00127
00128 }
00129
00130 }
00131
00132
00133 #endif // not _MPCL_IO_INPUT_STREAMABLE__