00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef SST_CORE_CORE_EXIT_H
00013 #define SST_CORE_CORE_EXIT_H
00014
00015 #include <sst/core/sst_types.h>
00016 #include <sst/core/serialization.h>
00017
00018 #include <unordered_set>
00019
00020 #include <sst/core/action.h>
00021
00022 namespace SST{
00023
00024 #define _EXIT_DBG( fmt, args...) __DBG( DBG_EXIT, Exit, fmt, ## args )
00025
00026 class Simulation;
00027 class TimeConverter;
00028
00029
00030
00031
00032
00033
00034 class Exit : public Action {
00035 public:
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050 Exit( Simulation* sim, TimeConverter* period, bool single_rank );
00051 ~Exit();
00052
00053
00054 bool refInc( ComponentId_t );
00055
00056 bool refDec( ComponentId_t );
00057
00058 void execute(void);
00059 void check();
00060
00061 void print(const std::string& header, Output &out) const {
00062 out.output("%s Exit Action to be delivered at %" PRIu64 " with priority %d\n",
00063 header.c_str(), getDeliveryTime(), getPriority());
00064 }
00065
00066 private:
00067 Exit() { }
00068 Exit(const Exit&);
00069 void operator=(Exit const&);
00070
00071
00072
00073
00074 unsigned int m_refCount;
00075 TimeConverter* m_period;
00076 std::unordered_set<ComponentId_t> m_idSet;
00077 SimTime_t end_time;
00078
00079 bool single_rank;
00080
00081 friend class boost::serialization::access;
00082 template<class Archive>
00083 void serialize(Archive & ar, const unsigned int version);
00084 };
00085
00086 }
00087
00088 BOOST_CLASS_EXPORT_KEY(SST::Exit)
00089
00090 #endif // SST_CORE_EXIT_H