00001 // This is really -*- C++ -*- 00002 00003 #ifndef MCAlgorithm_h 00004 #define MCAlgorithm_h 00005 00006 #include <iostream> 00007 #include <iomanip> 00008 00009 #include "BIEconfig.h" 00010 #include "Uniform.h" 00011 #include "Chain.h" 00012 00013 #include "Serializable.h" 00014 00015 00016 using namespace std; 00017 00018 namespace BIE { 00019 00020 class Simulation; 00021 00022 //+ CLICLASS MCAlgorithm 00026 class MCAlgorithm: public Serializable 00027 { 00028 00029 friend class Simulation; 00030 friend class TemperedSimulation; 00031 friend class ParallelChains; 00032 00033 public: 00034 00036 MCAlgorithm(); 00037 00039 ~MCAlgorithm(); 00040 00042 virtual void GetNewState(Simulation*, Chain*) = 0; 00043 00045 virtual void ComputeNewState(Simulation*, Chain*) = 0; 00046 00048 virtual double ComputeCurrentState(Simulation*, Chain*) = 0; 00049 00051 virtual double ComputeState(Simulation*, Chain*) = 0; 00052 00054 virtual bool Sweep(Simulation*, Chain*) = 0; 00055 00057 virtual void PrintAlgorithmDiagnostic(Simulation*) {} 00058 00059 protected: 00060 00062 Uniform* unit; 00063 00064 // AUTO GENERATED BY ../persistence/autopersist.py 00065 private: 00066 friend class boost::serialization::access; 00067 template<class Archive> 00068 void serialize(Archive & ar, const unsigned int version) { 00069 this->pre_serialize(ar, version); 00070 try { 00071 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Serializable); 00072 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00073 } 00074 try { 00075 ar & BOOST_SERIALIZATION_NVP(unit); 00076 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00077 } 00078 this->post_serialize(ar, version); 00079 } 00080 00081 }; 00082 } 00083 00084 #if BOOST_VERSION <= 103500 00085 BOOST_IS_ABSTRACT(BIE::MCAlgorithm) 00086 #else 00087 BOOST_SERIALIZATION_ASSUME_ABSTRACT(BIE::MCAlgorithm) 00088 #endif 00089 00090 BIE_CLASS_EXPORT_KEY(BIE::MCAlgorithm) 00091 #endif