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

output_streamable.hh

00001 /*
00002 *  Name:      output_streamable.hh
00003 *  Author:    Rafael Jesus Alcantara Perez
00004 *  Summary:   Base output 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_OUTPUT_STREAMABLE__
00027 #define _MPCL_IO_OUTPUT_STREAMABLE__
00028 
00029 #include <ostream>
00030 
00031 
00033 namespace mpcl
00034 {
00035   
00037   namespace io
00038   {
00039 
00041     template <typename TChar, typename TTraits>
00042     class IOutputStreamable;
00043 
00048     template <typename TChar, typename TTraits>
00049     std::basic_ostream<TChar, TTraits>&
00050     operator << ( std::basic_ostream<TChar, TTraits>&      rtSOURCE_OSTREAM            ,
00051                   const IOutputStreamable<TChar, TTraits>& rktSOURCE_OUTPUT_STREAMABLE );
00052 
00054     template < typename TChar   = char                    ,
00055                typename TTraits = std::char_traits<TChar> >
00056     class IOutputStreamable
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 ~IOutputStreamable (void) {}
00080 
00081 
00082       protected:
00083 
00084         //
00085         //  S E L E C T O R S
00086         //
00087 
00092         virtual void write (std::basic_ostream<char_type, traits_type>& rtOUTPUT_OSTREAM) const = 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 
00101         friend std::basic_ostream<TChar, TTraits>&
00102         operator << <TChar, TTraits>
00103         (
00104           std::basic_ostream<TChar, TTraits>&      rtSOURCE_OSTREAM            ,
00105           const IOutputStreamable<TChar, TTraits>& rktSOURCE_OUTPUT_STREAMABLE
00106         );
00107 
00108     };  // class IOutputStreamable
00109 
00110 
00111     //
00112     //  F R I E N D   F U N C T I O N S
00113     //
00114 
00115     template <typename TChar, typename TTraits>
00116     std::basic_ostream<TChar, TTraits>&
00117     operator << ( std::basic_ostream<TChar, TTraits>&      rtSOURCE_OSTREAM            ,
00118                   const IOutputStreamable<TChar, TTraits>& rktSOURCE_OUTPUT_STREAMABLE )
00119     {
00120       rktSOURCE_OUTPUT_STREAMABLE.write (rtSOURCE_OSTREAM);
00121       return rtSOURCE_OSTREAM;
00122     }
00123 
00124   }  // namespace io
00125 
00126 }  // namespace mpcl
00127 
00128 
00129 #endif  // not _MPCL_OUTPUT_STREAMABLE__

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