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
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00049 #ifndef TOPPERS_EVENTFLAG_HPP_
00050 #define TOPPERS_EVENTFLAG_HPP_
00051
00052 #include <toppers/object.hpp>
00053
00054 namespace toppers
00055 {
00056
00065 template <ID Id = 0,
00066 class Diagnostics = TOPPERS_DEFAULT_DIAGNOSTICS,
00067 class Stub = TOPPERS_DEFAULT_STUB >
00068 class eventflag : Diagnostics
00069 {
00070 typedef object_controller<Id, obj_eventflag, Stub> controller;
00071 object_id<Id> objid_;
00072
00073 public:
00075 typedef t_cflg creation;
00077 typedef t_rflg reference;
00078
00081
00083 eventflag() {}
00085 explicit eventflag(ID id) : objid_(id) {}
00086
00088 template <ID Id2, class Diagnostics2, class Stub2>
00089 eventflag(const eventflag<Id2, Diagnostics2, Stub2>& other)
00090 : objid_(get_unsafe_id(other))
00091 {
00092 TOPPERS_STATIC_ASSERT(Id == 0);
00093 }
00094
00096
00099
00100
00101 ER create(creation* pk_cobj)
00102 {
00103 ER ercd = controller::create(objid_, pk_cobj);
00104 return handle_error(ercd);
00105 }
00107 ER create(const creation* pk_cobj)
00108 {
00109 ER ercd = controller::create(objid_, pk_cobj);
00110 return handle_error(ercd);
00111 }
00113 ER create(ATR flgatr = TA_TFIFO | TA_WSGL, FLGPTN iflgptn = 0)
00114 {
00115 creation packet;
00116 packet.flgatr = flgatr;
00117 packet.iflgptn = iflgptn;
00118 return create(&packet);
00119 }
00121 ER destroy()
00122 {
00123 ER ercd = controller::destroy(objid_);
00124 return handle_error(ercd);
00125 }
00126
00128
00131
00133 ER refer(reference* pk_robj) const
00134 {
00135 ER ercd = controller::refer(objid_, pk_robj);
00136 return handle_error(ercd);
00137 }
00138
00140
00143
00145 ER set(FLGPTN setptn, task_context_tag = task_context) const
00146 {
00147 ER ercd = Stub::stub_set_flg(objid_.id(), setptn);
00148 return handle_error(ercd);
00149 }
00151 ER set(FLGPTN setptn, non_task_context_tag) const
00152 {
00153 ER ercd = Stub::stub_iset_flg(objid_.id(), setptn);
00154 return handle_error(ercd);
00155 }
00157 ER set(FLGPTN setptn, context_independent_tag) const
00158 {
00159 ER ercd;
00160 if (Stub::stub_sns_ctx())
00161 ercd = Stub::stub_iset_flg(objid_.id(), setptn);
00162 else
00163 ercd = Stub::stub_set_flg(objid_.id(), setptn);
00164 return handle_error(ercd);
00165 }
00166
00168 ER clear(FLGPTN clrptn) const
00169 {
00170 ER ercd = Stub::stub_clr_flg(objid_.id(), clrptn);
00171 return handle_error(ercd);
00172 }
00173
00175 ER wait(FLGPTN waiptn, MODE wfmode, FLGPTN* p_flgptn, forever_tag = forever) const
00176 {
00177 ER ercd = Stub::stub_wai_flg(objid_.id(), waiptn, wfmode, p_flgptn);
00178 return handle_error(ercd);
00179 }
00181 ER wait(FLGPTN waiptn, MODE wfmode, FLGPTN* p_flgptn, polling_tag) const
00182 {
00183 ER ercd = Stub::stub_pol_flg(objid_.id(), waiptn, wfmode, p_flgptn);
00184 return handle_error(ercd);
00185 }
00187 ER wait(FLGPTN waiptn, MODE wfmode, FLGPTN* p_flgptn, TMO tmout) const
00188 {
00189 ER ercd = Stub::stub_twai_flg(objid_.id(), waiptn, wfmode, p_flgptn, tmout);
00190 return handle_error(ercd);
00191 }
00192
00194
00196 friend ID get_unsafe_id(const eventflag<Id, Diagnostics, Stub>& obj)
00197 {
00198 return obj.objid_.id();
00199 }
00200 };
00201
00202 }
00203
00204 #endif // ! TOPPERS_EVENTFLAG_HPP_