Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members  

input_streamable.hh

00001 /*
00002 *  Name:      input_streamable.hh
00003 *  Author:    Rafael Jesus Alcantara Perez
00004 *  Summary:   Base input streamable class
00005 *  Date:      $Date: 2003/04/14 00:18:31 $
00006 *  Revision:  $Revision: 1.1 $
00007 *
00008 *  Copyright (C) 1994-2002  Rafael Jesus Alcantara Perez <rafa@dedalo-ing.com>
00009 *
00010 *  This program is free software; you can redistribute it and/or modify
00011 *  it under the terms of the GNU General Public License as published by
00012 *  the Free Software Foundation; either version 2 of the License, or
00013 *  (at your option) any later version.
00014 *
00015 *  This program is distributed in the hope that it will be useful,
00016 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00017 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018 *  GNU General Public License for more details.
00019 *
00020 *  You should have received a copy of the GNU General Public License
00021 *  along with this program; if not, write to the Free Software
00022 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
00023 *  MA 02111-1307, USA.
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         //  C O N S T R U C T O R S
00076         //
00077 
00079         virtual ~IInputStreamable (void) {}
00080 
00081 
00082       protected:
00083 
00084         //
00085         //  C O N S T R U C T O R S
00086         //
00087 
00092         virtual void read (std::basic_istream<char_type, traits_type>& rtISTREAM) = 0;
00093 
00094 
00095       public:
00096 
00097         //
00098         //  F R I E N D   F U N C T I O N S
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     };  // class IInputStreamable
00113 
00114 
00115     //
00116     //  F R I E N D   F U N C T I O N S
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   }  // namespace io
00129 
00130 }  // namespace mpcl
00131 
00132 
00133 #endif  // not _MPCL_IO_INPUT_STREAMABLE__

Generated on Mon Oct 13 02:35:23 2003 for MPCL by doxygen1.2.18