eoExternalEO.h

00001 /* -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
00002 
00003   -----------------------------------------------------------------------------
00004   eoExternalEO.h
00005         Definition of an object that allows an external struct to be inserted in EO
00006 
00007  (c) Maarten Keijzer (mkeijzer@mad.scientist.com) and GeNeura Team, 1999, 2000
00008 
00009     This library is free software; you can redistribute it and/or
00010     modify it under the terms of the GNU Lesser General Public
00011     License as published by the Free Software Foundation; either
00012     version 2 of the License, or (at your option) any later version.
00013 
00014     This library is distributed in the hope that it will be useful,
00015     but WITHOUT ANY WARRANTY; without even the implied warranty of
00016     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00017     Lesser General Public License for more details.
00018 
00019     You should have received a copy of the GNU Lesser General Public
00020     License along with this library; if not, write to the Free Software
00021     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00022 
00023     Contact: todos@geneura.ugr.es, http://geneura.ugr.es
00024  */
00025 
00026 #ifndef eoExternalEO_h
00027 #define eoExternalEO_h
00028 
00029 #include <EO.h> // EO
00030 
00038 template <class Fit, class External>
00039 class eoExternalEO : public EO<Fit>, virtual public External
00040 {
00041 public :
00042 
00043     eoExternalEO(void)
00044         : EO<Fit>(), External()
00045         {}
00046 
00048     eoExternalEO(const External& ext)
00049         : EO<Fit>(), External(ext)
00050         {}
00051 
00052     eoExternalEO(std::istream& is, const External& ext)
00053         : EO<Fit>(), External(ext)
00054         { readFrom(is); }
00055 
00059   virtual void readFrom(std::istream& _is)
00060   {
00061       EO<Fit>::readFrom(_is);
00062     _is >> static_cast<External&>(*this);
00063   }
00064 
00069   virtual void printOn(std::ostream& _os) const
00070   {
00071       EO<Fit>::printOn(_os);
00072       _os << static_cast<const External&>(*this);
00073   }
00074 
00075 };
00076 
00078 template <class F, class External>
00079 std::ostream& operator<<(std::ostream& os, const eoExternalEO<F, External>& eo)
00080 {
00081     eo.printOn(os);
00082     return os;
00083 }
00084 
00086 template <class F, class External>
00087 std::istream& operator>>(std::istream& is, eoExternalEO<F, External>& eo)
00088 {
00089     eo.readFrom(is);
00090     return is;
00091 }
00092 
00093 #endif

Generated on Thu Oct 19 05:06:35 2006 for EO by  doxygen 1.3.9.1