00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00037 #ifndef RC_EXPORTAL_H_
00038 #define RC_EXPORTAL_H_
00039
00040 #include "ReChannel/communication/exportals/rc_abstract_exportal.h"
00041
00042 namespace ReChannel {
00043
00049 template<class IF>
00050 class rc_exportal
00051 : public rc_abstract_exportal<IF>
00052 {
00053 public:
00054 typedef IF if_type;
00055 typedef rc_accessor<IF> accessor_type;
00056
00057 private:
00058 rc_exportal();
00059 explicit rc_exportal(const sc_module_name& module_name_);
00060 };
00061
00062 }
00063
00064
00065
00066 #define RC_EXPORTAL(interface_name) \
00067 template<> \
00068 struct rc_exportal<interface_name > \
00069 : public rc_abstract_exportal<interface_name >
00070
00071 #define RC_EXPORTAL_TEMPLATE(interface_name) \
00072 struct rc_exportal<interface_name > \
00073 : public rc_abstract_exportal<interface_name >
00074
00075 #define RC_EXPORTAL_CTOR(interface_name) \
00076 typedef interface_name if_type; \
00077 typedef rc_accessor<interface_name > accessor_type; \
00078 explicit rc_exportal( \
00079 const sc_module_name& module_name_ \
00080 = sc_gen_unique_name("rc_exportal")) \
00081 : rc_abstract_exportal<interface_name >(module_name_)
00082
00083 #define RC_EXPORTAL_TEMPLATE_CTOR(interface_name) \
00084 RC_EXPORTAL_CTOR(interface_name)
00085
00086
00087
00088
00089 #define RC_EXPORTAL_FORWARD_EVENT(event_method_name) \
00090 this->add_event_forwarder( \
00091 &if_type::event_method_name, #event_method_name)
00092
00093 #endif // RC_EXPORTAL_H_
00094
00095
00096
00097