BIE |
/home/weinberg/src/BIE/persistence/CLICheckpointManager.h00001 // This is really -*- C++ -*- 00002 00003 #ifndef CLICHECKPOINTMANAGER_H 00004 #define CLICHECKPOINTMANAGER_H 00005 00006 #include <iostream> 00007 #include <ctime> 00008 00009 #include "Serializable.h" 00010 00011 00012 #include "CLISaveManager.h" 00013 #include "CheckpointManager.h" 00014 00018 class CLICheckpointManager : public CheckpointManager 00019 { 00020 public: 00022 CLICheckpointManager(CLISaveManager &tsm); 00024 ~CLICheckpointManager(); 00025 00027 void checkpoint(std::ostream &out); 00028 00030 void on(); 00031 00033 void off(); 00034 00036 void toggle(); 00037 00039 void setInterval(uint64 iterations); 00040 00042 void setTimer(time_t seconds); 00043 00045 void setCheckpointNow(); 00046 00048 bool getOnOff(); 00049 00050 private: 00051 CLISaveManager * tsm; 00052 00053 bool is_on; 00054 00055 // when count == 0, take a checkpoint and reset it to interval 00056 uint64 itr_interval; 00057 uint64 itr_count; 00058 00059 // when deadline has passed, take a checkpoint and reset the timer 00060 time_t timer_interval; 00061 time_t timer_deadline; // FIXME: time.h 00062 00063 // take a checkpoint if this is true and set it to false 00064 bool now; 00065 00066 // set the timer deadline to the current time + the interval 00067 template<class Archive> 00068 void post_load(Archive &ar, const unsigned int file_version) 00069 { 00070 if (is_on && timer_interval > 0) { 00071 cout << setfill('-') << setw(80) << left << "- Checkpoint reload" 00072 << setfill(' ') << endl; 00073 time_t current_time = time(NULL); 00074 cout << setw(30) << left << "Current time is: " 00075 << ctime(¤t_time); 00076 cout << setw(30) << left << "Current deadline is: " 00077 << ctime(&timer_deadline); 00078 00079 timer_deadline = current_time + timer_interval; 00080 00081 cout << setw(30) << left << "Resetting deadline to: " 00082 << ctime(&timer_deadline); 00083 cout << setfill('-') << setw(80) << right << " Checkpoint reload -" 00084 << setfill(' ') << endl; 00085 } 00086 } 00087 00088 // AUTO GENERATED BY ../persistence/autopersist.py 00089 protected: 00090 CLICheckpointManager() {} 00091 private: 00092 friend class boost::serialization::access; 00093 BOOST_SERIALIZATION_SPLIT_MEMBER(); 00094 00095 template<class Archive> 00096 void save(Archive & ar, const unsigned int version) const { 00097 this->pre_save(ar, version); 00098 try { 00099 ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(CheckpointManager); 00100 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00101 } 00102 try { 00103 ar << BOOST_SERIALIZATION_NVP(tsm); 00104 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00105 } 00106 try { 00107 ar << BOOST_SERIALIZATION_NVP(is_on); 00108 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00109 } 00110 try { 00111 ar << BOOST_SERIALIZATION_NVP(itr_interval); 00112 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00113 } 00114 try { 00115 ar << BOOST_SERIALIZATION_NVP(itr_count); 00116 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00117 } 00118 try { 00119 ar << BOOST_SERIALIZATION_NVP(timer_interval); 00120 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00121 } 00122 try { 00123 ar << BOOST_SERIALIZATION_NVP(timer_deadline); 00124 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00125 } 00126 try { 00127 ar << BOOST_SERIALIZATION_NVP(now); 00128 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00129 } 00130 this->post_save(ar, version); 00131 } 00132 00133 template<class Archive> 00134 void load(Archive & ar, const unsigned int version) { 00135 this->pre_load(ar, version); 00136 try { 00137 ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(CheckpointManager); 00138 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00139 } 00140 try { 00141 ar >> BOOST_SERIALIZATION_NVP(tsm); 00142 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00143 } 00144 try { 00145 ar >> BOOST_SERIALIZATION_NVP(is_on); 00146 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00147 } 00148 try { 00149 ar >> BOOST_SERIALIZATION_NVP(itr_interval); 00150 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00151 } 00152 try { 00153 ar >> BOOST_SERIALIZATION_NVP(itr_count); 00154 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00155 } 00156 try { 00157 ar >> BOOST_SERIALIZATION_NVP(timer_interval); 00158 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00159 } 00160 try { 00161 ar >> BOOST_SERIALIZATION_NVP(timer_deadline); 00162 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00163 } 00164 try { 00165 ar >> BOOST_SERIALIZATION_NVP(now); 00166 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00167 } 00168 this->post_load(ar, version); 00169 } 00170 00171 }; 00172 BIE_CLASS_TYPE_INFO(CLICheckpointManager) 00173 BIE_CLASS_EXPORT_KEY(CLICheckpointManager) 00174 #endif Send suggestions, questions, and feedback to WEINBERG at ASTRO dot UMASS dot EDU. Documentation generated at Fri Mar 26 00:35:11 2010 by
|