00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef _XBARSH_H
00014 #define _XBARSH_H
00015
00016 #include <sst/eventFunctor.h>
00017 #include <sst/component.h>
00018 #include <sst/link.h>
00019 #include <sst/factory.h>
00020 #include <sst/simulation.h>
00021 #include "dummy.h"
00022 #include "xbar.h"
00023
00024 using namespace SST;
00025
00026 #if DBG_XBARSH
00027 #define _XBARSH_DBG( fmt, args...)\
00028 printf( "%d:XbarShell::%s():%d: "fmt, _debug_rank,__FUNCTION__,__LINE__, ## args )
00029 #else
00030 #define _XBARSH_DBG( fmt, args...)
00031 #endif
00032
00033 class XbarShell : public Component {
00034
00035 public:
00036 XbarShell( ComponentId_t id, Params_t& params ) :
00037 Component( id ),
00038 params( params )
00039 {
00040 _XBARSH_DBG("new id=%lu\n",id);
00041
00042 factory = Simulation::getSimulation()->getFactory();
00043 xbar = factory->Create( 0,"xbar", params );
00044
00045 Params_t dummy_params;
00046 dummy = new Dummy(0,dummy_params);
00047
00048 Connect(dummy,"port1",xbar,"port0");
00049
00050 Link* tmp;
00051
00052
00053 tmp = LinkAdd( "port0", dummy->LinkGet("port0") );
00054 if ( ! tmp ) _abort(XbarShell,"\n");
00055
00056
00057 tmp = LinkAdd( "port1", xbar->LinkGet("port1") );
00058 if ( ! tmp ) _abort(XbarShell,"\n");
00059 }
00060
00061 private:
00062
00063 XbarShell( const XbarShell& c );
00064 bool clock( Cycle_t, Time_t );
00065 bool processEvent( Time_t, Event* );
00066
00067 Dummy* dummy;
00068 Component* xbar;
00069 Params_t params;
00070 Factory* factory;
00071
00072 friend class boost::serialization::access;
00073 template<class Archive>
00074 void serialize(Archive & ar, const unsigned int version )
00075 {
00076 _AR_DBG(XbarShell,"start\n");
00077 boost::serialization::
00078 void_cast_register(static_cast<XbarShell*>(NULL),
00079 static_cast<Component*>(NULL));
00080 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Component );
00081 ar & BOOST_SERIALIZATION_NVP( factory );
00082 ar & BOOST_SERIALIZATION_NVP( dummy );
00083 ar & BOOST_SERIALIZATION_NVP( xbar );
00084 _AR_DBG(XbarShell,"done\n");
00085 }
00086 template<class Archive>
00087 friend void save_construct_data(Archive & ar,
00088 const XbarShell * t,
00089 const unsigned int file_version)
00090 {
00091 _AR_DBG(XbarShell,"\n");
00092 ComponentId_t id = t->_id;
00093 Params_t params = t->params;
00094 ar << BOOST_SERIALIZATION_NVP( id );
00095 ar << BOOST_SERIALIZATION_NVP( params );
00096 }
00097 template<class Archive>
00098 friend void load_construct_data(Archive & ar,
00099 XbarShell * t,
00100 const unsigned int file_version)
00101 {
00102 _AR_DBG(XbarShell,"\n");
00103 ComponentId_t id;
00104 Params_t params;
00105 ar >> BOOST_SERIALIZATION_NVP( id );
00106 ar >> BOOST_SERIALIZATION_NVP( params );
00107 ::new(t)XbarShell( id, params );
00108 }
00109 };
00110
00111 #endif