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_ABSTRACT_ACCESSOR_H_
00038 #define RC_ABSTRACT_ACCESSOR_H_
00039
00040 #include "ReChannel/core/rc_common_header.h"
00041 #include "ReChannel/core/rc_process.h"
00042 #include "ReChannel/util/rc_hash_map.h"
00043 #include "ReChannel/communication/rc_report_ids.h"
00044 #include "ReChannel/communication/rc_fallback_interface.h"
00045 #include "ReChannel/communication/rc_interface_wrapper.h"
00046
00047 namespace ReChannel {
00048
00049 template<class IF> class rc_abstract_accessor;
00050
00054 class rc_abstract_accessor_b
00055 : virtual public rc_interface_wrapper_base::accessor_base
00056 {
00057 template<class IF> friend class rc_abstract_accessor;
00058
00059 private:
00060 typedef std::vector<sc_port_base*> port_vector;
00061 typedef std::map<sc_object*, int> process_index_map;
00062
00063 private:
00064 rc_abstract_accessor_b();
00065
00066 public:
00067
00068 virtual void register_port(
00069 sc_port_base& port_, const char* if_typename_);
00070
00071 inline virtual rc_event_filter* rc_get_event_filter()
00072 { return NULL; }
00073
00074 inline virtual int rc_get_bound_port_count() const
00075 { return p_bound_port_vector.size(); }
00076
00077 inline virtual sc_port_base* rc_get_bound_port(int index) const
00078 { return p_bound_port_vector[index]; }
00079
00080 protected:
00081
00082 virtual bool rc_on_event(const sc_event& e)
00083 { return true; }
00084
00085 virtual void rc_set_event_trigger(
00086 const sc_event& e, rc_event_trigger& t) { }
00087
00088 virtual void rc_clear_event_trigger(const sc_event& e) { }
00089
00090 int rc_get_driver_process_index(sc_object* proc) const;
00091
00092 int rc_get_nb_driver_process_index(sc_object* proc) const;
00093
00094 inline int rc_get_driver_process_count() const
00095 { return p_process_index_map.size(); }
00096
00097 inline int rc_get_nb_driver_process_count() const
00098 { return p_nb_process_index_map.size(); }
00099
00100
00101
00102 inline void next_trigger()
00103 { rc_next_trigger(); }
00104
00105 inline void next_trigger(const sc_event& e)
00106 { rc_next_trigger(e); }
00107
00108 inline void next_trigger(sc_event_or_list& el)
00109 { rc_next_trigger(el); }
00110
00111 inline void next_trigger(sc_event_and_list& el)
00112 { rc_next_trigger(el); }
00113
00114 inline void next_trigger(const sc_time& t)
00115 { rc_next_trigger(t); }
00116
00117 inline void next_trigger(double v, sc_time_unit tu)
00118 { rc_next_trigger(v, tu); }
00119
00120 inline void next_trigger(const sc_time& t, const sc_event& e)
00121 { rc_next_trigger(t, e); }
00122
00123 inline void next_trigger(double v, sc_time_unit tu, const sc_event& e)
00124 { rc_next_trigger(v, tu, e); }
00125
00126 inline void next_trigger(const sc_time& t, sc_event_or_list& el)
00127 { rc_next_trigger(t, el); }
00128
00129 inline void next_trigger(
00130 double v, sc_time_unit t, sc_event_or_list& el)
00131 { rc_next_trigger(v, t, el); }
00132
00133 inline void next_trigger(const sc_time& t, sc_event_and_list& el)
00134 { rc_next_trigger(t, el); }
00135
00136 inline void next_trigger(
00137 double v, sc_time_unit tu, sc_event_and_list& el)
00138 { rc_next_trigger(v, tu, el); }
00139
00140
00141
00142 inline void wait()
00143 { rc_wait(); }
00144
00145 inline void wait(int n)
00146 { rc_wait(n); }
00147
00148 inline void wait(const sc_event& e)
00149 { rc_wait(e); }
00150
00151 inline void wait(sc_event_or_list& el)
00152 { rc_wait(el); }
00153
00154 inline void wait(sc_event_and_list& el)
00155 { rc_wait(el); }
00156
00157 inline void wait(const sc_time& t)
00158 { rc_wait(t); }
00159
00160 inline void wait(double v, sc_time_unit tu)
00161 { rc_wait(v, tu); }
00162
00163 inline void wait(const sc_time& t, const sc_event& e)
00164 { rc_wait(t, e); }
00165
00166 inline void wait(double v, sc_time_unit tu, const sc_event& e)
00167 { rc_wait(v, tu, e); }
00168
00169 inline void wait(const sc_time& t, sc_event_or_list& el)
00170 { rc_wait(t, el); }
00171
00172 inline void wait(double v, sc_time_unit t, sc_event_or_list& el)
00173 { rc_wait(v, t, el); }
00174
00175 inline void wait(const sc_time& t, sc_event_and_list& el)
00176 { rc_wait(t, el); }
00177
00178 inline void wait(double v, sc_time_unit tu, sc_event_and_list& el)
00179 { rc_wait(v, tu, el); }
00180
00181 private:
00182 int rc_register_driver_process(sc_object* proc);
00183
00184 int rc_register_nb_driver_process(sc_object* proc);
00185
00186 private:
00187 port_vector p_bound_port_vector;
00188 process_index_map p_process_index_map;
00189 process_index_map p_nb_process_index_map;
00190
00191 private:
00192
00193 rc_abstract_accessor_b(const rc_abstract_accessor_b& accessor);
00194 rc_abstract_accessor_b& operator=(const rc_abstract_accessor_b& accessor);
00195 };
00196
00197
00198
00199 #define _RECHANNEL_ACCESSOR_NB_FW_(if_method_args, wrapper_call) \
00200 try { \
00201 if (p_target_if != NULL) { \
00202 return ((p_target_if->*method)if_method_args); \
00203 } else if (p_target_wrapper != NULL) { \
00204 return (wrapper_call); \
00205 } \
00206 } catch(rc_process_cancel_exception* e) { \
00207 rc_process_handle hproc = rc_get_current_process_handle(); \
00208 if (hproc.is_canceled()) { \
00209 ::ReChannel::rc_throw(e); \
00210 } else { \
00211 delete e; \
00212 } \
00213 } \
00214 return ((rc_get_fallback_if().*method)if_method_args);
00215
00216 #define _RECHANNEL_ACCESSOR_FW_(if_method_args, wrapper_call) \
00217 rc_process_handle hproc = rc_get_current_process_handle(); \
00218 while(true) { \
00219 try { \
00220 if (p_target_if != NULL) { \
00221 rc_process_behavior_change temp = \
00222 this->_rc_process_behavior_change(hproc); \
00223 return ((p_target_if->*method)if_method_args); \
00224 } else if (p_target_wrapper != NULL) { \
00225 return (wrapper_call); \
00226 } \
00227 } catch(rc_process_cancel_exception* e) { \
00228 if (hproc.is_canceled()) { \
00229 ::ReChannel::rc_throw(e); \
00230 } else { \
00231 delete e; \
00232 } \
00233 } \
00234 this->_rc_wait_activation(); \
00235 }
00236
00237 #define _RECHANNEL_ACCESSOR_NB_FW(if_method_args) \
00238 _RECHANNEL_ACCESSOR_NB_FW_( \
00239 if_method_args, \
00240 ((p_target_wrapper->get_nb_interface_access()->*method) \
00241 if_method_args))
00242
00243 #define _RECHANNEL_ACCESSOR_FW(if_method_args) \
00244 _RECHANNEL_ACCESSOR_FW_( \
00245 if_method_args, \
00246 ((p_target_wrapper->get_interface_access()->*method) \
00247 if_method_args))
00248
00249 #define _RECHANNEL_ACCESSOR_NB_FW_DRV(if_method_args, drv_call_args) \
00250 _RECHANNEL_ACCESSOR_NB_FW_( \
00251 if_method_args, \
00252 (p_target_wrapper->get_nb_driver_access( \
00253 _rc_nb_driver_process_index(sc_get_current_process_handle())) \
00254 ->call drv_call_args))
00255
00256 #define _RECHANNEL_ACCESSOR_FW_DRV(if_method_args, drv_call_args) \
00257 _RECHANNEL_ACCESSOR_FW_( \
00258 if_method_args, \
00259 (p_target_wrapper->get_driver_access( \
00260 _rc_driver_process_index(hproc))->call drv_call_args))
00261
00265 template<class IF>
00266 class rc_abstract_accessor
00267 : public rc_abstract_accessor_b,
00268 virtual public rc_interface_wrapper<IF>::accessor
00269 {
00270 RC_STATIC_ASSERT_VALID_INTERFACE(IF);
00271
00272 private:
00273 typedef typename
00274 rc_interface_wrapper<IF>::accessor::interface_access
00275 interface_access;
00276 typedef typename
00277 rc_interface_wrapper<IF>::accessor::nb_interface_access
00278 nb_interface_access;
00279 typedef typename rc_interface_wrapper<IF>::accessor::driver_access
00280 driver_access;
00281 typedef typename rc_interface_wrapper<IF>::accessor::nb_driver_access
00282 nb_driver_access;
00283
00284 typedef rc_abstract_accessor<IF> this_type;
00285 typedef rc_abstract_accessor_b base_type;
00286
00287 public:
00288 typedef IF if_type;
00289
00290 protected:
00291 explicit rc_abstract_accessor(
00292 rc_interface_wrapper<IF>* target_wrapper=NULL);
00293
00294 public:
00295 virtual
00296 rc_interface_wrapper_base* rc_get_target_wrapper_base() const
00297 { return p_target_wrapper; }
00298
00299 virtual rc_interface_wrapper<IF>* rc_get_target_wrapper() const
00300 { return p_target_wrapper; }
00301
00302 virtual bool rc_set_target(rc_interface_wrapper_base& target);
00303
00304 virtual bool rc_set_target(rc_interface_wrapper<IF>& target);
00305
00306 virtual sc_interface* rc_get_target_interface() const
00307 { return p_target_if; }
00308
00309 virtual bool rc_set_target(sc_interface& target);
00310
00311 virtual bool rc_set_target(
00312 sc_interface& target, const rc_process_control& pctrl);
00313
00314 virtual bool rc_set_target(IF& target);
00315
00316 virtual bool rc_set_target(
00317 IF& target, const rc_process_control& pctrl);
00318
00319 virtual void rc_clear_target();
00320
00321 virtual void rc_on_target_changed() { }
00322
00323 inline bool rc_has_target_wrapper() const
00324 { return (p_target_wrapper != NULL); }
00325
00326 inline bool rc_has_target_interface() const
00327 { return (p_target_if != NULL); }
00328
00329 protected:
00330 virtual IF& rc_get_fallback_if() const;
00331
00332
00333
00334 template<class R, class IF_>
00335 inline R rc_nb_forward(R (IF_::*method)()) const
00336 { _RECHANNEL_ACCESSOR_NB_FW(()); }
00337
00338 template<class R, class IF_>
00339 inline R rc_nb_forward(R (IF_::*method)() const) const
00340 { _RECHANNEL_ACCESSOR_NB_FW(()); }
00341
00342 template<class R, class A1, class A1_, class IF_>
00343 inline R rc_nb_forward(R (IF_::*method)(A1_), A1 a1) const
00344 { _RECHANNEL_ACCESSOR_NB_FW((a1)); }
00345
00346 template<class R, class A1, class A1_, class IF_>
00347 inline R rc_nb_forward(R (IF_::*method)(A1_) const, A1 a1) const
00348 { _RECHANNEL_ACCESSOR_NB_FW((a1)); }
00349
00350 template<class R, class A1, class A2, class A1_, class A2_, class IF_>
00351 inline R rc_nb_forward(
00352 R (IF_::*method)(A1_, A2_), A1 a1, A2 a2) const
00353 { _RECHANNEL_ACCESSOR_NB_FW((a1, a2)); }
00354
00355 template<class R, class A1, class A2, class A1_, class A2_, class IF_>
00356 inline R rc_nb_forward(
00357 R (IF_::*method)(A1_, A2_) const, A1 a1, A2 a2) const
00358 { _RECHANNEL_ACCESSOR_NB_FW((a1, a2)); }
00359
00360 template<class R, class A1, class A2, class A3,
00361 class A1_, class A2_, class A3_, class IF_>
00362 inline R rc_nb_forward(
00363 R (IF_::*method)(A1_, A2_, A3_), A1 a1, A2 a2, A3 a3) const
00364 { _RECHANNEL_ACCESSOR_NB_FW((a1, a2, a3)); }
00365
00366 template<class R, class A1, class A2, class A3,
00367 class A1_, class A2_, class A3_, class IF_>
00368 inline R rc_nb_forward(
00369 R (IF_::*method)(A1_, A2_, A3_) const,
00370 A1 a1, A2 a2, A3 a3) const
00371 { _RECHANNEL_ACCESSOR_NB_FW((a1, a2, a3)); }
00372
00373 template<class R, class A1, class A2, class A3, class A4,
00374 class A1_, class A2_, class A3_, class A4_, class IF_>
00375 inline R rc_nb_forward(
00376 R (IF_::*method)(A1_, A2_, A3_, A4_),
00377 A1 a1, A2 a2, A3 a3, A4 a4) const
00378 { _RECHANNEL_ACCESSOR_NB_FW((a1, a2, a3, a4)); }
00379
00380 template<class R, class A1, class A2, class A3, class A4,
00381 class A1_, class A2_, class A3_, class A4_, class IF_>
00382 inline R rc_nb_forward(
00383 R (IF_::*method)(A1_, A2_, A3_, A4_) const,
00384 A1 a1, A2 a2, A3 a3, A4 a4) const
00385 { _RECHANNEL_ACCESSOR_NB_FW((a1, a2, a3, a4)); }
00386
00387 template<class R, class A1, class A2, class A3, class A4, class A5,
00388 class A1_, class A2_, class A3_, class A4_, class A5_,
00389 class IF_>
00390 inline R rc_nb_forward(
00391 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_),
00392 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
00393 { _RECHANNEL_ACCESSOR_NB_FW((a1, a2, a3, a4, a5)); }
00394
00395 template<class R, class A1, class A2, class A3, class A4, class A5,
00396 class A1_, class A2_, class A3_, class A4_, class A5_,
00397 class IF_>
00398 inline R rc_nb_forward(
00399 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_) const,
00400 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
00401 { _RECHANNEL_ACCESSOR_NB_FW((a1, a2, a3, a4, a5)); }
00402
00403 template<class R,
00404 class A1, class A2, class A3, class A4, class A5, class A6,
00405 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00406 class IF_>
00407 inline R rc_nb_forward(
00408 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_),
00409 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
00410 { _RECHANNEL_ACCESSOR_NB_FW((a1, a2, a3, a4, a5, a6)); }
00411
00412 template<class R,
00413 class A1, class A2, class A3, class A4, class A5, class A6,
00414 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00415 class IF_>
00416 inline R rc_nb_forward(
00417 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_) const,
00418 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
00419 { _RECHANNEL_ACCESSOR_NB_FW((a1, a2, a3, a4, a5, a6)); }
00420
00421 template<class R,
00422 class A1, class A2, class A3, class A4, class A5, class A6,
00423 class A7,
00424 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00425 class A7_, class IF_>
00426 inline R rc_nb_forward(
00427 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_, A7_),
00428 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
00429 { _RECHANNEL_ACCESSOR_NB_FW((a1, a2, a3, a4, a5, a6, a7)); }
00430
00431 template<class R,
00432 class A1, class A2, class A3, class A4, class A5, class A6,
00433 class A7,
00434 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00435 class A7_, class IF_>
00436 inline R rc_nb_forward(
00437 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_, A7_) const,
00438 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
00439 { _RECHANNEL_ACCESSOR_NB_FW((a1, a2, a3, a4, a5, a6, a7)); }
00440
00441 template<class R,
00442 class A1, class A2, class A3, class A4, class A5, class A6,
00443 class A7, class A8,
00444 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00445 class A7_, class A8_, class IF_>
00446 inline R rc_nb_forward(
00447 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_, A7_, A8_),
00448 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
00449 { _RECHANNEL_ACCESSOR_NB_FW((a1, a2, a3, a4, a5, a6, a7, a8)); }
00450
00451 template<class R,
00452 class A1, class A2, class A3, class A4, class A5, class A6,
00453 class A7, class A8,
00454 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00455 class A7_, class A8_, class IF_>
00456 inline R rc_nb_forward(
00457 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_, A7_, A8_) const,
00458 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
00459 { _RECHANNEL_ACCESSOR_NB_FW((a1, a2, a3, a4, a5, a6, a7, a8)); }
00460
00461 template<class R,
00462 class A1, class A2, class A3, class A4, class A5, class A6,
00463 class A7, class A8, class A9,
00464 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00465 class A7_, class A8_, class A9_, class IF_>
00466 inline R rc_nb_forward(
00467 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_, A7_, A8_, A9_),
00468 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6,
00469 A7 a7, A8 a8, A9 a9)const
00470 { _RECHANNEL_ACCESSOR_NB_FW((a1, a2, a3, a4, a5, a6, a7, a8, a9)); }
00471
00472 template<class R,
00473 class A1, class A2, class A3, class A4, class A5, class A6,
00474 class A7, class A8, class A9,
00475 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00476 class A7_, class A8_, class A9_, class IF_>
00477 inline R rc_nb_forward(
00478 R (IF_::*method)(
00479 A1_, A2_, A3_, A4_, A5_, A6_, A7_, A8_, A9_) const,
00480 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5,
00481 A6 a6, A7 a7, A8 a8, A9 a9) const
00482 { _RECHANNEL_ACCESSOR_NB_FW((a1, a2, a3, a4, a5, a6, a7, a8, a9)); }
00483
00484 template<class R,
00485 class A1, class A2, class A3, class A4, class A5, class A6,
00486 class A7, class A8, class A9, class A10,
00487 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00488 class A7_, class A8_, class A9_, class A10_, class IF_>
00489 inline R rc_nb_forward(
00490 R (IF_::*method)(
00491 A1_, A2_, A3_, A4_, A5_, A6_, A7_, A8_, A9_, A10_),
00492 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6,
00493 A7 a7, A8 a8, A9 a9, A10 a10) const
00494 {
00495 _RECHANNEL_ACCESSOR_NB_FW(
00496 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10));
00497 }
00498
00499 template<class R,
00500 class A1, class A2, class A3, class A4, class A5, class A6,
00501 class A7, class A8, class A9, class A10,
00502 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00503 class A7_, class A8_, class A9_, class A10_, class IF_>
00504 inline R rc_nb_forward(
00505 R (IF_::*method)(
00506 A1_, A2_, A3_, A4_, A5_, A6_, A7_, A8_, A9_, A10_) const,
00507 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6,
00508 A7 a7, A8 a8, A9 a9, A10 a10) const
00509 {
00510 _RECHANNEL_ACCESSOR_NB_FW(
00511 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10));
00512 }
00513
00514
00515
00516 template<class R, class IF_>
00517 inline R rc_forward(R (IF_::*method)()) const
00518 { _RECHANNEL_ACCESSOR_FW(()); }
00519
00520 template<class R, class IF_>
00521 inline R rc_forward(R (IF_::*method)() const) const
00522 { _RECHANNEL_ACCESSOR_FW(()); }
00523
00524 template<class R, class A1, class A1_, class IF_>
00525 inline R rc_forward(R (IF_::*method)(A1_), A1 a1) const
00526 { _RECHANNEL_ACCESSOR_FW((a1)); }
00527
00528 template<class R, class A1, class A1_, class IF_>
00529 inline R rc_forward(R (IF_::*method)(A1_) const, A1 a1) const
00530 { _RECHANNEL_ACCESSOR_FW((a1)); }
00531
00532 template<class R, class A1, class A2, class A1_, class A2_, class IF_>
00533 inline R rc_forward(
00534 R (IF_::*method)(A1_, A2_), A1 a1, A2 a2) const
00535 { _RECHANNEL_ACCESSOR_FW((a1, a2)); }
00536
00537 template<class R, class A1, class A2, class A1_, class A2_, class IF_>
00538 inline R rc_forward(
00539 R (IF_::*method)(A1_, A2_) const, A1 a1, A2 a2) const
00540 { _RECHANNEL_ACCESSOR_FW((a1, a2)); }
00541
00542 template<class R, class A1, class A2, class A3,
00543 class A1_, class A2_, class A3_, class IF_>
00544 inline R rc_forward(
00545 R (IF_::*method)(A1_, A2_, A3_), A1 a1, A2 a2, A3 a3) const
00546 { _RECHANNEL_ACCESSOR_FW((a1, a2, a3)); }
00547
00548 template<class R, class A1, class A2, class A3,
00549 class A1_, class A2_, class A3_, class IF_>
00550 inline R rc_forward(
00551 R (IF_::*method)(A1_, A2_, A3_) const,
00552 A1 a1, A2 a2, A3 a3) const
00553 { _RECHANNEL_ACCESSOR_FW((a1, a2, a3)); }
00554
00555 template<class R, class A1, class A2, class A3, class A4,
00556 class A1_, class A2_, class A3_, class A4_, class IF_>
00557 inline R rc_forward(
00558 R (IF_::*method)(A1_, A2_, A3_, A4_),
00559 A1 a1, A2 a2, A3 a3, A4 a4) const
00560 { _RECHANNEL_ACCESSOR_FW((a1, a2, a3, a4)); }
00561
00562 template<class R, class A1, class A2, class A3, class A4,
00563 class A1_, class A2_, class A3_, class A4_, class IF_>
00564 inline R rc_forward(
00565 R (IF_::*method)(A1_, A2_, A3_, A4_) const,
00566 A1 a1, A2 a2, A3 a3, A4 a4) const
00567 { _RECHANNEL_ACCESSOR_FW((a1, a2, a3, a4)); }
00568
00569 template<class R, class A1, class A2, class A3, class A4, class A5,
00570 class A1_, class A2_, class A3_, class A4_, class A5_,
00571 class IF_>
00572 inline R rc_forward(
00573 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_),
00574 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
00575 { _RECHANNEL_ACCESSOR_FW((a1, a2, a3, a4, a5)); }
00576
00577 template<class R, class A1, class A2, class A3, class A4, class A5,
00578 class A1_, class A2_, class A3_, class A4_, class A5_,
00579 class IF_>
00580 inline R rc_forward(
00581 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_) const,
00582 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
00583 { _RECHANNEL_ACCESSOR_FW((a1, a2, a3, a4, a5)); }
00584
00585 template<class R,
00586 class A1, class A2, class A3, class A4, class A5, class A6,
00587 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00588 class IF_>
00589 inline R rc_forward(
00590 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_),
00591 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
00592 { _RECHANNEL_ACCESSOR_FW((a1, a2, a3, a4, a5, a6)); }
00593
00594 template<class R,
00595 class A1, class A2, class A3, class A4, class A5, class A6,
00596 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00597 class IF_>
00598 inline R rc_forward(
00599 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_) const,
00600 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
00601 { _RECHANNEL_ACCESSOR_FW((a1, a2, a3, a4, a5, a6)); }
00602
00603 template<class R,
00604 class A1, class A2, class A3, class A4, class A5, class A6,
00605 class A7,
00606 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00607 class A7_, class IF_>
00608 inline R rc_forward(
00609 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_, A7_),
00610 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
00611 { _RECHANNEL_ACCESSOR_FW((a1, a2, a3, a4, a5, a6, a7)); }
00612
00613 template<class R,
00614 class A1, class A2, class A3, class A4, class A5, class A6,
00615 class A7,
00616 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00617 class A7_, class IF_>
00618 inline R rc_forward(
00619 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_, A7_) const,
00620 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
00621 { _RECHANNEL_ACCESSOR_FW((a1, a2, a3, a4, a5, a6, a7)); }
00622
00623 template<class R,
00624 class A1, class A2, class A3, class A4, class A5, class A6,
00625 class A7, class A8,
00626 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00627 class A7_, class A8_, class IF_>
00628 inline R rc_forward(
00629 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_, A7_, A8_),
00630 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
00631 { _RECHANNEL_ACCESSOR_FW((a1, a2, a3, a4, a5, a6, a7, a8)); }
00632
00633 template<class R,
00634 class A1, class A2, class A3, class A4, class A5, class A6,
00635 class A7, class A8,
00636 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00637 class A7_, class A8_, class IF_>
00638 inline R rc_forward(
00639 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_, A7_, A8_) const,
00640 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
00641 { _RECHANNEL_ACCESSOR_FW((a1, a2, a3, a4, a5, a6, a7, a8)); }
00642
00643 template<class R,
00644 class A1, class A2, class A3, class A4, class A5, class A6,
00645 class A7, class A8, class A9,
00646 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00647 class A7_, class A8_, class A9_, class IF_>
00648 inline R rc_forward(
00649 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_, A7_, A8_, A9_),
00650 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6,
00651 A7 a7, A8 a8, A9 a9) const
00652 { _RECHANNEL_ACCESSOR_FW((a1, a2, a3, a4, a5, a6, a7, a8, a9)); }
00653
00654 template<class R,
00655 class A1, class A2, class A3, class A4, class A5, class A6,
00656 class A7, class A8, class A9,
00657 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00658 class A7_, class A8_, class A9_, class IF_>
00659 inline R rc_forward(
00660 R (IF_::*method)(
00661 A1_, A2_, A3_, A4_, A5_, A6_, A7_, A8_, A9_) const,
00662 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6,
00663 A7 a7, A8 a8, A9 a9) const
00664 { _RECHANNEL_ACCESSOR_FW((a1, a2, a3, a4, a5, a6, a7, a8, a9)); }
00665
00666 template<class R,
00667 class A1, class A2, class A3, class A4, class A5, class A6,
00668 class A7, class A8, class A9, class A10,
00669 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00670 class A7_, class A8_, class A9_, class A10_, class IF_>
00671 inline R rc_forward(
00672 R (IF_::*method)(
00673 A1_, A2_, A3_, A4_, A5_, A6_, A7_, A8_, A9_, A10_),
00674 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6,
00675 A7 a7, A8 a8, A9 a9, A10 a10) const
00676 { _RECHANNEL_ACCESSOR_FW((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)); }
00677
00678 template<class R,
00679 class A1, class A2, class A3, class A4, class A5, class A6,
00680 class A7, class A8, class A9, class A10,
00681 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00682 class A7_, class A8_, class A9_, class A10_, class IF_>
00683 inline R rc_forward(
00684 R (IF_::*method)(
00685 A1_, A2_, A3_, A4_, A5_, A6_, A7_, A8_, A9_, A10_) const,
00686 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6,
00687 A7 a7, A8 a8, A9 a9, A10 a10) const
00688 { _RECHANNEL_ACCESSOR_FW((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)); }
00689
00690
00691
00692 template<class IF_>
00693 inline void rc_nb_forward_driver(void (IF_::*method)())
00694 { _RECHANNEL_ACCESSOR_NB_FW_DRV((), (method)); }
00695
00696 template<class IF_>
00697 inline void rc_nb_forward_driver(void (IF_::*method)() const)
00698 { _RECHANNEL_ACCESSOR_NB_FW_DRV((), (method)); }
00699
00700 template<class A1, class A1_, class IF_>
00701 inline void rc_nb_forward_driver(void (IF_::*method)(A1_), A1 a1)
00702 { _RECHANNEL_ACCESSOR_NB_FW_DRV((a1), (method, a1)); }
00703
00704 template<class A1, class A1_, class IF_>
00705 inline void rc_nb_forward_driver(
00706 void (IF_::*method)(A1_) const, A1 a1)
00707 { _RECHANNEL_ACCESSOR_NB_FW_DRV((a1), (method, a1)); }
00708
00709 template<class A1, class A2, class A1_, class A2_, class IF_>
00710 inline void rc_nb_forward_driver(
00711 void (IF_::*method)(A1_, A2_), A1 a1, A2 a2)
00712 { _RECHANNEL_ACCESSOR_NB_FW_DRV((a1, a2), (method, a1, a2)); }
00713
00714 template<class A1, class A2, class A1_, class A2_, class IF_>
00715 inline void rc_nb_forward_driver(
00716 void (IF_::*method)(A1_, A2_) const, A1 a1, A2 a2)
00717 { _RECHANNEL_ACCESSOR_NB_FW_DRV((a1, a2), (method, a1, a2)); }
00718
00719 template<class A1, class A2, class A3,
00720 class A1_, class A2_, class A3_, class IF_>
00721 inline void rc_nb_forward_driver(
00722 void (IF_::*method)(A1_, A2_, A3_), A1 a1, A2 a2, A3 a3)
00723 { _RECHANNEL_ACCESSOR_NB_FW_DRV((a1, a2, a3), (method, a1, a2, a3)); }
00724
00725 template<class A1, class A2, class A3,
00726 class A1_, class A2_, class A3_, class IF_>
00727 inline void rc_nb_forward_driver(
00728 void (IF_::*method)(A1_, A2_, A3_) const, A1 a1, A2 a2, A3 a3)
00729 { _RECHANNEL_ACCESSOR_NB_FW_DRV((a1, a2, a3), (method, a1, a2, a3)); }
00730
00731 template<class A1, class A2, class A3, class A4,
00732 class A1_, class A2_, class A3_, class A4_, class IF_>
00733 inline void rc_nb_forward_driver(
00734 void (IF_::*method)(A1_, A2_, A3_, A4_),
00735 A1 a1, A2 a2, A3 a3, A4 a4)
00736 { _RECHANNEL_ACCESSOR_NB_FW_DRV(
00737 (a1, a2, a3, a4), (method, a1, a2, a3, a4)); }
00738
00739 template<class A1, class A2, class A3, class A4,
00740 class A1_, class A2_, class A3_, class A4_, class IF_>
00741 inline void rc_nb_forward_driver(
00742 void (IF_::*method)(A1_, A2_, A3_, A4_) const,
00743 A1 a1, A2 a2, A3 a3, A4 a4)
00744 { _RECHANNEL_ACCESSOR_NB_FW_DRV(
00745 (a1, a2, a3, a4), (method, a1, a2, a3, a4)); }
00746
00747 template<class A1, class A2, class A3, class A4, class A5,
00748 class A1_, class A2_, class A3_, class A4_, class A5_, class IF_>
00749 inline void rc_nb_forward_driver(
00750 void (IF_::*method)(A1_, A2_, A3_, A4_, A5_),
00751 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
00752 { _RECHANNEL_ACCESSOR_NB_FW_DRV(
00753 (a1, a2, a3, a4, a5), (method, a1, a2, a3, a4, a5)); }
00754
00755 template<class A1, class A2, class A3, class A4, class A5,
00756 class A1_, class A2_, class A3_, class A4_, class A5_, class IF_>
00757 inline void rc_nb_forward_driver(
00758 void (IF_::*method)(A1_, A2_, A3_, A4_, A5_) const,
00759 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
00760 { _RECHANNEL_ACCESSOR_NB_FW_DRV(
00761 (a1, a2, a3, a4, a5), (method, a1, a2, a3, a4, a5)); }
00762
00763 template<class A1, class A2, class A3, class A4, class A5, class A6,
00764 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00765 class IF_>
00766 inline void rc_nb_forward_driver(
00767 void (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_),
00768 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
00769 { _RECHANNEL_ACCESSOR_NB_FW_DRV(
00770 (a1, a2, a3, a4, a5, a6), (method, a1, a2, a3, a4, a5, a6)); }
00771
00772 template<class A1, class A2, class A3, class A4, class A5, class A6,
00773 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00774 class IF_>
00775 inline void rc_nb_forward_driver(
00776 void (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_) const,
00777 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
00778 { _RECHANNEL_ACCESSOR_NB_FW_DRV(
00779 (a1, a2, a3, a4, a5, a6), (method, a1, a2, a3, a4, a5, a6)); }
00780
00781 template<class A1, class A2, class A3, class A4, class A5, class A6,
00782 class A7,
00783 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00784 class A7_, class IF_>
00785 inline void rc_nb_forward_driver(
00786 void (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_, A7_),
00787 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
00788 { _RECHANNEL_ACCESSOR_NB_FW_DRV(
00789 (a1, a2, a3, a4, a5, a6, a7),
00790 (method, a1, a2, a3, a4, a5, a6, a7)); }
00791
00792 template<class A1, class A2, class A3, class A4, class A5, class A6,
00793 class A7,
00794 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00795 class A7_, class IF_>
00796 inline void rc_nb_forward_driver(
00797 void (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_, A7_) const,
00798 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
00799 { _RECHANNEL_ACCESSOR_NB_FW_DRV(
00800 (a1, a2, a3, a4, a5, a6, a7),
00801 (method, a1, a2, a3, a4, a5, a6, a7)); }
00802
00803 template<class A1, class A2, class A3, class A4, class A5, class A6,
00804 class A7, class A8,
00805 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00806 class A7_, class A8_, class IF_>
00807 inline void rc_nb_forward_driver(
00808 void (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_, A7_, A8_),
00809 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
00810 { _RECHANNEL_ACCESSOR_NB_FW_DRV(
00811 (a1, a2, a3, a4, a5, a6, a7, a8),
00812 (method, a1, a2, a3, a4, a5, a6, a7, a8)); }
00813
00814 template<class A1, class A2, class A3, class A4, class A5, class A6,
00815 class A7, class A8,
00816 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00817 class A7_, class A8_, class IF_>
00818 inline void rc_nb_forward_driver(
00819 void (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_, A7_, A8_) const,
00820 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
00821 { _RECHANNEL_ACCESSOR_NB_FW_DRV(
00822 (a1, a2, a3, a4, a5, a6, a7, a8),
00823 (method, a1, a2, a3, a4, a5, a6, a7, a8)); }
00824
00825 template<class A1, class A2, class A3, class A4, class A5, class A6,
00826 class A7, class A8, class A9,
00827 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00828 class A7_, class A8_, class A9_, class IF_>
00829 inline void rc_nb_forward_driver(
00830 void (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_, A7_, A8_, A9_),
00831 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
00832 { _RECHANNEL_ACCESSOR_NB_FW_DRV(
00833 (a1, a2, a3, a4, a5, a6, a7, a8, a9),
00834 (method, a1, a2, a3, a4, a5, a6, a7, a8, a9)); }
00835
00836 template<class A1, class A2, class A3, class A4, class A5, class A6,
00837 class A7, class A8, class A9,
00838 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00839 class A7_, class A8_, class A9_, class IF_>
00840 inline void rc_nb_forward_driver(
00841 void (IF_::*method)(
00842 A1_, A2_, A3_, A4_, A5_, A6_, A7_, A8_, A9_) const,
00843 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
00844 { _RECHANNEL_ACCESSOR_NB_FW_DRV(
00845 (a1, a2, a3, a4, a5, a6, a7, a8, a9),
00846 (method, a1, a2, a3, a4, a5, a6, a7, a8, a9)); }
00847
00848 template<class A1, class A2, class A3, class A4, class A5, class A6,
00849 class A7, class A8, class A9, class A10,
00850 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00851 class A7_, class A8_, class A9_, class A10_, class IF_>
00852 inline void rc_nb_forward_driver(
00853 void (IF_::*method)(
00854 A1_, A2_, A3_, A4_, A5_, A6_, A7_, A8_, A9_, A10_),
00855 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6,
00856 A7 a7, A8 a8, A9 a9, A10 a10)
00857 { _RECHANNEL_ACCESSOR_NB_FW_DRV(
00858 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10),
00859 (method, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)); }
00860
00861 template<class A1, class A2, class A3, class A4, class A5, class A6,
00862 class A7, class A8, class A9, class A10,
00863 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00864 class A7_, class A8_, class A9_, class A10_, class IF_>
00865 inline void rc_nb_forward_driver(
00866 void (IF_::*method)(
00867 A1_, A2_, A3_, A4_, A5_, A6_, A7_, A8_, A9_, A10_) const,
00868 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6,
00869 A7 a7, A8 a8, A9 a9, A10 a10)
00870 { _RECHANNEL_ACCESSOR_NB_FW_DRV(
00871 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10),
00872 (method, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)); }
00873
00874
00875
00876 template<class R, class IF_>
00877 inline R rc_forward_driver(R (IF_::*method)())
00878 { _RECHANNEL_ACCESSOR_FW_DRV((), (method)); }
00879
00880 template<class R, class IF_>
00881 inline R rc_forward_driver(R (IF_::*method)() const)
00882 { _RECHANNEL_ACCESSOR_FW_DRV((), (method)); }
00883
00884 template<class R, class A1, class A1_, class IF_>
00885 inline R rc_forward_driver(R (IF_::*method)(A1_), A1 a1)
00886 { _RECHANNEL_ACCESSOR_FW_DRV((a1), (method, a1)); }
00887
00888 template<class R, class A1, class A1_, class IF_>
00889 inline R rc_forward_driver(
00890 R (IF_::*method)(A1_) const, A1 a1)
00891 { _RECHANNEL_ACCESSOR_FW_DRV((a1), (method, a1)); }
00892
00893 template<class R, class A1, class A2, class A1_, class A2_, class IF_>
00894 inline R rc_forward_driver(
00895 R (IF_::*method)(A1_, A2_), A1 a1, A2 a2)
00896 { _RECHANNEL_ACCESSOR_FW_DRV((a1, a2), (method, a1, a2)); }
00897
00898 template<class R, class A1, class A2, class A1_, class A2_, class IF_>
00899 inline R rc_forward_driver(
00900 R (IF_::*method)(A1_, A2_) const, A1 a1, A2 a2)
00901 { _RECHANNEL_ACCESSOR_FW_DRV((a1, a2), (method, a1, a2)); }
00902
00903 template<class R, class A1, class A2, class A3,
00904 class A1_, class A2_, class A3_, class IF_>
00905 inline R rc_forward_driver(
00906 R (IF_::*method)(A1_, A2_, A3_), A1 a1, A2 a2, A3 a3)
00907 { _RECHANNEL_ACCESSOR_FW_DRV((a1, a2, a3), (method, a1, a2, a3)); }
00908
00909 template<class R, class A1, class A2, class A3,
00910 class A1_, class A2_, class A3_, class IF_>
00911 inline R rc_forward_driver(
00912 R (IF_::*method)(A1_, A2_, A3_) const, A1 a1, A2 a2, A3 a3)
00913 { _RECHANNEL_ACCESSOR_FW_DRV((a1, a2, a3), (method, a1, a2, a3)); }
00914
00915 template<class R, class A1, class A2, class A3, class A4,
00916 class A1_, class A2_, class A3_, class A4_, class IF_>
00917 inline R rc_forward_driver(
00918 R (IF_::*method)(A1_, A2_, A3_, A4_),
00919 A1 a1, A2 a2, A3 a3, A4 a4)
00920 { _RECHANNEL_ACCESSOR_FW_DRV(
00921 (a1, a2, a3, a4), (method, a1, a2, a3, a4)); }
00922
00923 template<class R, class A1, class A2, class A3, class A4,
00924 class A1_, class A2_, class A3_, class A4_, class IF_>
00925 inline R rc_forward_driver(
00926 R (IF_::*method)(A1_, A2_, A3_, A4_) const,
00927 A1 a1, A2 a2, A3 a3, A4 a4)
00928 { _RECHANNEL_ACCESSOR_FW_DRV(
00929 (a1, a2, a3, a4), (method, a1, a2, a3, a4)); }
00930
00931 template<class R, class A1, class A2, class A3, class A4, class A5,
00932 class A1_, class A2_, class A3_, class A4_, class A5_, class IF_>
00933 inline R rc_forward_driver(
00934 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_),
00935 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
00936 { _RECHANNEL_ACCESSOR_FW_DRV(
00937 (a1, a2, a3, a4, a5), (method, a1, a2, a3, a4, a5)); }
00938
00939 template<class R, class A1, class A2, class A3, class A4, class A5,
00940 class A1_, class A2_, class A3_, class A4_, class A5_, class IF_>
00941 inline R rc_forward_driver(
00942 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_) const,
00943 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
00944 { _RECHANNEL_ACCESSOR_FW_DRV(
00945 (a1, a2, a3, a4, a5), (method, a1, a2, a3, a4, a5)); }
00946
00947 template<class R,
00948 class A1, class A2, class A3, class A4, class A5, class A6,
00949 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00950 class IF_>
00951 inline R rc_forward_driver(
00952 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_),
00953 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
00954 { _RECHANNEL_ACCESSOR_FW_DRV(
00955 (a1, a2, a3, a4, a5, a6), (method, a1, a2, a3, a4, a5, a6)); }
00956
00957 template<class R,
00958 class A1, class A2, class A3, class A4, class A5, class A6,
00959 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00960 class IF_>
00961 inline R rc_forward_driver(
00962 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_) const,
00963 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
00964 { _RECHANNEL_ACCESSOR_FW_DRV(
00965 (a1, a2, a3, a4, a5, a6), (method, a1, a2, a3, a4, a5, a6)); }
00966
00967 template<class R,
00968 class A1, class A2, class A3, class A4, class A5, class A6,
00969 class A7,
00970 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00971 class A7_, class IF_>
00972 inline R rc_forward_driver(
00973 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_, A7_),
00974 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
00975 { _RECHANNEL_ACCESSOR_FW_DRV(
00976 (a1, a2, a3, a4, a5, a6, a7),
00977 (method, a1, a2, a3, a4, a5, a6, a7)); }
00978
00979 template<class R,
00980 class A1, class A2, class A3, class A4, class A5, class A6,
00981 class A7,
00982 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00983 class A7_, class IF_>
00984 inline R rc_forward_driver(
00985 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_, A7_) const,
00986 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
00987 { _RECHANNEL_ACCESSOR_FW_DRV(
00988 (a1, a2, a3, a4, a5, a6, a7),
00989 (method, a1, a2, a3, a4, a5, a6, a7)); }
00990
00991 template<class R,
00992 class A1, class A2, class A3, class A4, class A5, class A6,
00993 class A7, class A8,
00994 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
00995 class A7_, class A8_, class IF_>
00996 inline R rc_forward_driver(
00997 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_, A7_, A8_),
00998 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
00999 { _RECHANNEL_ACCESSOR_FW_DRV(
01000 (a1, a2, a3, a4, a5, a6, a7, a8),
01001 (method, a1, a2, a3, a4, a5, a6, a7, a8)); }
01002
01003 template<class R,
01004 class A1, class A2, class A3, class A4, class A5, class A6,
01005 class A7, class A8,
01006 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
01007 class A7_, class A8_, class IF_>
01008 inline R rc_forward_driver(
01009 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_, A7_, A8_) const,
01010 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
01011 { _RECHANNEL_ACCESSOR_FW_DRV(
01012 (a1, a2, a3, a4, a5, a6, a7, a8),
01013 (method, a1, a2, a3, a4, a5, a6, a7, a8)); }
01014
01015 template<class R,
01016 class A1, class A2, class A3, class A4, class A5, class A6,
01017 class A7, class A8, class A9,
01018 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
01019 class A7_, class A8_, class A9_, class IF_>
01020 inline R rc_forward_driver(
01021 R (IF_::*method)(A1_, A2_, A3_, A4_, A5_, A6_, A7_, A8_, A9_),
01022 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
01023 { _RECHANNEL_ACCESSOR_FW_DRV(
01024 (a1, a2, a3, a4, a5, a6, a7, a8, a9),
01025 (method, a1, a2, a3, a4, a5, a6, a7, a8, a9)); }
01026
01027 template<class R,
01028 class A1, class A2, class A3, class A4, class A5, class A6,
01029 class A7, class A8, class A9,
01030 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
01031 class A7_, class A8_, class A9_, class IF_>
01032 inline R rc_forward_driver(
01033 R (IF_::*method)(
01034 A1_, A2_, A3_, A4_, A5_, A6_, A7_, A8_, A9_) const,
01035 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
01036 { _RECHANNEL_ACCESSOR_FW_DRV(
01037 (a1, a2, a3, a4, a5, a6, a7, a8, a9),
01038 (method, a1, a2, a3, a4, a5, a6, a7, a8, a9)); }
01039
01040 template<class R,
01041 class A1, class A2, class A3, class A4, class A5, class A6,
01042 class A7, class A8, class A9, class A10,
01043 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
01044 class A7_, class A8_, class A9_, class A10_, class IF_>
01045 inline R rc_forward_driver(
01046 R (IF_::*method)(
01047 A1_, A2_, A3_, A4_, A5_, A6_, A7_, A8_, A9_, A10_),
01048 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6,
01049 A7 a7, A8 a8, A9 a9, A10 a10)
01050 { _RECHANNEL_ACCESSOR_FW_DRV(
01051 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10),
01052 (method, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)); }
01053
01054 template<class R,
01055 class A1, class A2, class A3, class A4, class A5, class A6,
01056 class A7, class A8, class A9, class A10,
01057 class A1_, class A2_, class A3_, class A4_, class A5_, class A6_,
01058 class A7_, class A8_, class A9_, class A10_, class IF_>
01059 inline R rc_forward_driver(
01060 R (IF_::*method)(
01061 A1_, A2_, A3_, A4_, A5_, A6_, A7_, A8_, A9_, A10_) const,
01062 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6,
01063 A7 a7, A8 a8, A9 a9, A10 a10)
01064 { _RECHANNEL_ACCESSOR_FW_DRV(
01065 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10),
01066 (method, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)); }
01067
01068 private:
01069
01070
01071
01072 rc_process_behavior_change _rc_process_behavior_change(
01073 rc_process_handle& hproc) const;
01074
01075 void _rc_wait_activation() const;
01076
01077 inline int _rc_driver_process_index(sc_process_handle& hproc);
01078
01079 inline int _rc_nb_driver_process_index(sc_process_handle hproc);
01080
01081 private:
01082 rc_interface_wrapper<IF>* p_target_wrapper;
01083 IF* p_target_if;
01084 sc_event p_target_set_event;
01085 const rc_process_control* p_pctrl;
01086
01087 private:
01088
01089 rc_abstract_accessor(const rc_abstract_accessor& accessor);
01090 rc_abstract_accessor& operator=(const rc_abstract_accessor& accessor);
01091 };
01092
01093 #undef _RECHANNEL_ACCESSOR_NB_FW_
01094 #undef _RECHANNEL_ACCESSOR_FW_
01095 #undef _RECHANNEL_ACCESSOR_NB_FW
01096 #undef _RECHANNEL_ACCESSOR_FW
01097 #undef _RECHANNEL_ACCESSOR_NB_FW_DRV
01098 #undef _RECHANNEL_ACCESSOR_FW_DRV
01099
01100
01101
01102 template<class IF>
01103 rc_abstract_accessor<IF>::rc_abstract_accessor(
01104 rc_interface_wrapper<IF>* target_wrapper)
01105 : p_target_wrapper(target_wrapper), p_target_if(NULL), p_pctrl(NULL)
01106 { }
01107
01108 template<class IF>
01109 bool rc_abstract_accessor<IF>::rc_set_target(
01110 rc_interface_wrapper<IF>& target)
01111 {
01112 this->rc_clear_target();
01113 p_target_wrapper = ⌖
01114 rc_notify(p_target_set_event);
01115 return true;
01116 }
01117
01118 template<class IF>
01119 bool rc_abstract_accessor<IF>::rc_set_target(
01120 rc_interface_wrapper_base& target)
01121 {
01122 rc_interface_wrapper<IF>* target_ =
01123 dynamic_cast<rc_interface_wrapper<IF>*>(&target);
01124 if (target_ != NULL) {
01125 return this->rc_set_target(*target_);
01126 } else {
01127 return false;
01128 }
01129 }
01130
01131 template<class IF>
01132 bool rc_abstract_accessor<IF>::rc_set_target(IF& target)
01133 {
01134 this->rc_clear_target();
01135 p_target_if = ⌖
01136 rc_notify(p_target_set_event);
01137 return true;
01138 }
01139
01140 template<class IF>
01141 bool rc_abstract_accessor<IF>::rc_set_target(
01142 IF& target, const rc_process_control& pctrl)
01143 {
01144 this->rc_clear_target();
01145 p_target_if = ⌖
01146 p_pctrl = &pctrl;
01147 rc_notify(p_target_set_event);
01148 return true;
01149 }
01150
01151 template<class IF>
01152 bool rc_abstract_accessor<IF>::rc_set_target(sc_interface& target)
01153 {
01154 IF* target_ = dynamic_cast<IF*>(&target);
01155 if (target_ != NULL) {
01156 return this->rc_set_target(*target_);
01157 } else {
01158 return false;
01159 }
01160 }
01161
01162 template<class IF>
01163 bool rc_abstract_accessor<IF>::rc_set_target(
01164 sc_interface& target, const rc_process_control& pctrl)
01165 {
01166 IF* target_ = dynamic_cast<IF*>(&target);
01167 if (target_ != NULL) {
01168 return this->rc_set_target(*target_, pctrl);
01169 } else {
01170 return false;
01171 }
01172 }
01173
01174 template<class IF>
01175 void rc_abstract_accessor<IF>::rc_clear_target()
01176 {
01177 p_target_if = NULL;
01178 p_target_wrapper = NULL;
01179 p_pctrl = NULL;
01180 this->rc_on_target_changed();
01181 }
01182
01183 template<class IF>
01184 IF& rc_abstract_accessor<IF>::rc_get_fallback_if() const
01185 {
01186 static IF* s_fallback_if =
01187 rc_fallback_interface_factory<IF>::create();
01188 if (s_fallback_if != NULL) {
01189 return *s_fallback_if;
01190 } else {
01191 RC_REPORT_ERROR(RC_ID_FALLBACK_INTERFACE_MISSING_,
01192 "a default fallback interface doesn't exist for this accessor");
01193 }
01194 }
01195
01196 template<class IF>
01197 rc_process_behavior_change
01198 rc_abstract_accessor<IF>::_rc_process_behavior_change(
01199 rc_process_handle& hproc) const
01200 {
01201 if (p_pctrl != NULL) {
01202 return hproc.behavior_change(*p_pctrl);
01203 } else {
01204 return rc_process_behavior_change();
01205 }
01206 }
01207
01208 template<class IF>
01209 void rc_abstract_accessor<IF>::_rc_wait_activation() const
01210 {
01211 if (p_pctrl == NULL) {
01212 rc_wait(p_target_set_event);
01213 } else {
01214 rc_wait(p_pctrl->get_activation_event());
01215 }
01216 }
01217
01218 template<class IF>
01219 inline
01220 int rc_abstract_accessor<IF>::_rc_driver_process_index(
01221 sc_process_handle& hproc)
01222 {
01223 sc_object* proc = hproc.get_process_object();
01224 int index = rc_get_driver_process_index(proc);
01225 return (index == -1 ? rc_register_driver_process(proc) : index);
01226 }
01227
01228 template<class IF>
01229 inline
01230 int rc_abstract_accessor<IF>::_rc_nb_driver_process_index(
01231 sc_process_handle hproc)
01232 {
01233 sc_object* proc = hproc.get_process_object();
01234 int index = rc_get_nb_driver_process_index(proc);
01235 return (index == -1 ? rc_register_nb_driver_process(proc) : index);
01236 }
01237
01238 }
01239
01240 #endif // RC_ABSTRACT_ACCESSOR_H_
01241
01242
01243
01244
01245