RMOL Logo Get Revenue Management Optimisation Library at SourceForge.net. Fast, secure and Free Open Source software downloads

StructAbstract.hpp

Go to the documentation of this file.
00001 #ifndef __RMOL_BOM_STRUCTABSTRACT_HPP
00002 #define __RMOL_BOM_STRUCTABSTRACT_HPP
00003 
00004 // //////////////////////////////////////////////////////////////////////
00005 // Import section
00006 // //////////////////////////////////////////////////////////////////////
00007 // STL
00008 #include <iostream>
00009 #include <sstream>
00010 
00011 namespace RMOL {
00012 
00015   struct StructAbstract {
00016   public:
00017     
00019     virtual ~StructAbstract() {}
00020     
00023     void toStream (std::ostream& ioOut) const {
00024       ioOut << describe();
00025     }
00026     
00029     virtual void fromStream (std::istream& ioIn) {}
00030     
00032     virtual const std::string describe() const = 0;
00033     
00034   protected:
00036     StructAbstract() {}
00037   };
00038 }
00039 
00045 template <class charT, class traits>
00046 inline
00047 std::basic_ostream<charT, traits>&
00048 operator<< (std::basic_ostream<charT, traits>& ioOut,
00049             const RMOL::StructAbstract& iStruct) {
00055   std::basic_ostringstream<charT,traits> ostr;
00056   ostr.copyfmt (ioOut);
00057   ostr.width (0);
00058 
00059   // Fill string stream
00060   iStruct.toStream (ostr);
00061 
00062   // Print string stream
00063   ioOut << ostr.str();
00064 
00065   return ioOut;
00066 }
00067 
00073 template <class charT, class traits>
00074 inline
00075 std::basic_istream<charT, traits>&
00076 operator>> (std::basic_istream<charT, traits>& ioIn,
00077             RMOL::StructAbstract& ioStruct) {
00078   // Fill the Structure object with the input stream.
00079   ioStruct.fromStream (ioIn);
00080   return ioIn;
00081 
00082 }
00083 
00084 #endif // __RMOL_BOM_STRUCTABSTRACT_HPP
SourceForge Logo

Generated on Sun Mar 7 13:11:10 2010 for RMOL by Doxygen 1.6.1