00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef eoExternalEO_h
00027 #define eoExternalEO_h
00028
00029 #include <EO.h>
00030
00038 template <class Fit, class External>
00039 class eoExternalEO : public EO<Fit>, virtual public External
00040 {
00041 public :
00042
00043 eoExternalEO()
00044 : External(), EO<Fit>()
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