00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "sampa/component/protocol.h"
00020 #include "sampa/core/persistence.cxx"
00021
00022 #define SAMPA_MAKE_ADAPTING_INITIATOR(Adapted)\
00023 template<> AdaptingInitiator<Adapted>::AdaptingInitiator(const Name& nm, RecieveResponseFunc callback) \
00024 : Initiator(nm, this), \
00025 m_module(dynamic_cast<Adapted*>(get_parent())), \
00026 m_callback(callback) \
00027 { \
00028 } \
00029 template<> void AdaptingInitiator<Adapted>::complete_restart(RecieveResponseFunc callback) \
00030 { m_callback = callback; } \
00031 template<> bool AdaptingInitiator<Adapted>::recieve_response(const Response& response) \
00032 { return (m_module->*m_callback)(response); } \
00033 SAMPA_MAKE_TMPL_PERSISTENT(AdaptingInitiator<Adapted>, AdaptingInitiator, REF(m_module))
00034
00035 #define SAMPA_MAKE_ADAPTING_TARGET(Adapted)\
00036 template<> AdaptingTarget<Adapted>::AdaptingTarget(const Name& nm, RecieveRequestFunc callback) \
00037 : Target(nm, this), \
00038 m_module(dynamic_cast<Adapted*>(get_parent())), \
00039 m_callback(callback) \
00040 { \
00041 } \
00042 template<> void AdaptingTarget<Adapted>::complete_restart(RecieveRequestFunc callback) \
00043 { m_callback = callback; } \
00044 template<> bool AdaptingTarget<Adapted>::recieve_request(const Request& request) \
00045 { return (m_module->*m_callback)(request); } \
00046 SAMPA_MAKE_TMPL_PERSISTENT(AdaptingTarget<Adapted>, AdaptingTarget, REF(m_module))
00047
00048 # define SAMPA_MAKE_FACTORY(factory_class) \
00049 Sampa::Transaction::FactoryBase* create_factory() { \
00050 return pnew(factory_class)(Sampa::DEFAULT_CTR); \
00051 } \
00052 SAMPA_MAKE_TMPL_PERSISTENT(factory_class, Factory, NO_REFS)
00053
00054 #if SAMPA_CONFIG_COLD_RESTART == SAMPA_ENABLED
00055 #include <typeinfo>
00056 namespace Sampa {
00057 template<class Ext> class_descriptor Tx<Ext>::self_class(typeid(Tx()).name(), sizeof(Tx), &Tx::constructor);
00058 }
00059 #endif
00060