StdAir Logo  0.45.0
C++ Standard Airline IT Object Library
StructAbstract.hpp
Go to the documentation of this file.
00001 #ifndef __STDAIR_BAS_STRUCTABSTRACT_HPP
00002 #define __STDAIR_BAS_STRUCTABSTRACT_HPP
00003 
00004 // //////////////////////////////////////////////////////////////////////
00005 // Import section
00006 // //////////////////////////////////////////////////////////////////////
00007 // STL
00008 #include <iosfwd>
00009 #include <string>
00010 
00011 namespace stdair {
00012 
00016   struct StructAbstract {
00017   public:
00018 
00022     virtual ~StructAbstract() {}
00023 
00029     void toStream (std::ostream& ioOut) const {
00030       ioOut << describe();
00031     }
00032 
00038     virtual void fromStream (std::istream& ioIn) {}
00039 
00043     virtual const std::string describe() const = 0;
00044 
00045   protected:
00049     StructAbstract() {}
00050   };
00051 }
00052 
00058 template <class charT, class traits>
00059 inline
00060 std::basic_ostream<charT, traits>&
00061 operator<< (std::basic_ostream<charT, traits>& ioOut,
00062             const stdair::StructAbstract& iStruct) {
00068   std::basic_ostringstream<charT,traits> ostr;
00069   ostr.copyfmt (ioOut);
00070   ostr.width (0);
00071 
00072   // Fill string stream
00073   iStruct.toStream (ostr);
00074 
00075   // Print string stream
00076   ioOut << ostr.str();
00077 
00078   return ioOut;
00079 }
00080 
00086 template <class charT, class traits>
00087 inline
00088 std::basic_istream<charT, traits>&
00089 operator>> (std::basic_istream<charT, traits>& ioIn,
00090             stdair::StructAbstract& ioStruct) {
00091   // Fill the Structure object with the input stream.
00092   ioStruct.fromStream (ioIn);
00093   return ioIn;
00094 
00095 }
00096 #endif // __STDAIR_BAS_STRUCTABSTRACT_HPP