00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef _PSST_H
00013
00014
00015
00016
00017
00018 #define _PSST_H
00019 #include <vector>
00020 #include <utility>
00021 #include <string>
00022
00023 #include <sst/eventFunctor.h>
00024 #include <sst/component.h>
00025 #include <sst/link.h>
00026
00027 #include "models/model.h"
00028
00029 #define DBG_PSST 1
00030
00031 #if DBG_PSST
00032 #define _PSST_DBG(fmt, args...) {\
00033 printf("%d:Psst::%s():%d: " fmt, _debug_rank, \
00034 __FUNCTION__, __LINE__, ## args\
00035 );\
00036 }
00037 #else
00038 #define _PSST_DBG(fmt, args...)
00039 #endif
00040
00041 class Psst : public SST::Component {
00042 public:
00043 Psst(SST::ComponentId_t id, SST::Clock* clock, Params_t& params);
00044
00045 private:
00046 Psst(const Psst &c);
00047 bool clock(SST::Cycle_t current, SST::Time_t epoch);
00048 bool processEvent(SST::Time_t time, SST::Event* event);
00049
00050 SST::ClockHandler_t *clockHandler;
00051 SST::Event::Handler_t *eventHandler;
00052
00053 Params_t params;
00054 SST::Link *inLink;
00055
00056
00057 std::vector<std::pair <std::string, std::string> > model_params;
00058
00059
00060 void *model_lib;
00061 int model_lib_id;
00062 void (*setpsst_fp)(int);
00063 int (*initmodel_fp)();
00064 int (*dispatch_fp)();
00065 int (*dispatch_vm_fp)();
00066 int (*loadmodel_fp)(const char* model);
00067 int (*loadvm_fp)(const char* vm, int argc, const char** argv, long freq);
00068 void (*tick_fp)(void);
00069
00070
00071 BOOST_SERIALIZE {
00072 _AR_DBG(SST::Psst,"start\n");
00073 BOOST_VOID_CAST_REGISTER(Psst *, SST::Component *);
00074 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(SST::Component);
00075 ar & BOOST_SERIALIZATION_NVP(inLink);
00076 ar & BOOST_SERIALIZATION_NVP(clockHandler);
00077 ar & BOOST_SERIALIZATION_NVP(eventHandler);
00078 _AR_DBG(Psst,"done\n");
00079 }
00080
00081 SAVE_CONSTRUCT_DATA( Psst ) {
00082 _AR_DBG(SST::Psst,"\n");
00083 SST::ComponentId_t id = t->_id;
00084 SST::Clock* clock = t->_clock;
00085 Params_t params = t->params;
00086 ar << BOOST_SERIALIZATION_NVP(id);
00087 ar << BOOST_SERIALIZATION_NVP(clock);
00088 ar << BOOST_SERIALIZATION_NVP(params);
00089 }
00090
00091 LOAD_CONSTRUCT_DATA( Psst ) {
00092 _AR_DBG(Psst,"\n");
00093 SST::ComponentId_t id;
00094 SST::Clock* clock;
00095 Params_t params;
00096 ar >> BOOST_SERIALIZATION_NVP(id);
00097 ar >> BOOST_SERIALIZATION_NVP(clock);
00098 ar >> BOOST_SERIALIZATION_NVP(params);
00099 ::new(t)Psst(id, clock, params);
00100 }
00101 };
00102
00103 #endif