$treeview $search $mathjax
TraDemGen Logo  1.00.0
$projectbrief
$projectbrief
$searchbox

TRADEMGEN_Abstract.hpp

Go to the documentation of this file.
00001 #ifndef __TRADEMGEN_TRADEMGEN_ABSTRACT_HPP
00002 #define __TRADEMGEN_TRADEMGEN_ABSTRACT_HPP
00003 
00004 // //////////////////////////////////////////////////////////////////////
00005 // Import section
00006 // //////////////////////////////////////////////////////////////////////
00007 // STL
00008 #include <istream>
00009 #include <ostream>
00010 #include <sstream>
00011 #include <string>
00012 
00013 namespace TRADEMGEN {
00014 
00016   struct TRADEMGEN_Abstract {
00017   public:
00018     // /////////// Display support methods /////////
00021     virtual void toStream (std::ostream& ioOut) const = 0;
00022 
00025     virtual void fromStream (std::istream& ioIn) = 0;
00026 
00028     virtual std::string toString() const = 0;
00029     
00030 
00031   protected:
00033     TRADEMGEN_Abstract () {}
00034     TRADEMGEN_Abstract (const TRADEMGEN_Abstract&) {}
00035 
00037     virtual ~TRADEMGEN_Abstract() {}
00038   };
00039 }
00040 
00046 template <class charT, class traits>
00047 inline
00048 std::basic_ostream<charT, traits>&
00049 operator<< (std::basic_ostream<charT, traits>& ioOut,
00050             const TRADEMGEN::TRADEMGEN_Abstract& iStructure) {
00056   std::basic_ostringstream<charT,traits> ostr;
00057   ostr.copyfmt (ioOut);
00058   ostr.width (0);
00059 
00060   // Fill string stream
00061   iStructure.toStream (ostr);
00062 
00063   // Print string stream
00064   ioOut << ostr.str();
00065 
00066   return ioOut;
00067 }
00068 
00074 template <class charT, class traits>
00075 inline
00076 std::basic_istream<charT, traits>&
00077 operator>> (std::basic_istream<charT, traits>& ioIn,
00078             TRADEMGEN::TRADEMGEN_Abstract& ioStucture) {
00079   // Fill Bom object with input stream
00080   ioStucture.fromStream (ioIn);
00081   return ioIn;
00082 }
00083 
00084 #endif // __TRADEMGEN_TRADEMGEN_ABSTRACT_HPP