23 #ifndef MCR_EXTRAS_WRAPPERS_H_ 24 #define MCR_EXTRAS_WRAPPERS_H_ 26 #include "mcr/extras/base_cpp.h" 37 return self.interface;
55 inline mcr_ISignal &operator *()
59 inline const mcr_ISignal &operator *()
const 73 template<
typename ISignalMemberT>
76 interface().data_size =
sizeof(ISignalMemberT);
77 interface().
allocate = &ISignal::allocate<ISignalMemberT>;
78 interface().deallocate = &ISignal::deallocate<ISignalMemberT>;
79 interface().compare = &ISignal::compare<ISignalMemberT>;
80 interface().copy = &ISignal::copy<ISignalMemberT>;
81 self.send = &ISignal::sendFn<ISignalMemberT>;
86 template<
typename ISignalMemberT>
89 return new ISignalMemberT();
93 template<
typename ISignalMemberT>
97 delete reinterpret_cast<ISignalMemberT *
>(dataPt);
101 template<
typename ISignalMemberT>
102 static int compare(
const void *lhsPt,
const void *rhsPt)
106 return reinterpret_cast<const ISignalMemberT *
>(lhsPt)->compare(*reinterpret_cast<const ISignalMemberT *>
114 template<
typename ISignalMemberT>
115 static int copy(
void *dstPt,
const void *srcPt)
120 reinterpret_cast<ISignalMemberT *
>(dstPt)->copy(reinterpret_cast<const ISignalMemberT *>(srcPt));
128 template<
typename ISignalMemberT>
133 ISignalMemberT *dataPt =
reinterpret_cast<ISignalMemberT *
>(signalPt->instance.
data_member.
data);
136 dataPt->send(signalPt);
164 void (*deinit)(
struct mcr_IDispatcher *) =
nullptr,
166 void (*clear)(
struct mcr_IDispatcher *) =
nullptr,
170 void (*trim)(
struct mcr_IDispatcher *) =
nullptr);
175 inline mcr_IDispatcher &operator *()
179 inline const mcr_IDispatcher &operator *()
const 203 return self.interface;
212 mcr_Trigger_receive_fnc receive =
nullptr);
219 inline mcr_ITrigger &operator *()
223 inline const mcr_ITrigger &operator *()
const 251 return self.instance;
255 return self.interface;
264 self.isignal = isignal;
265 self.dispatch_flag = dispatchFlag;
270 copy(©tron.self);
272 Signal(
const mcr_Signal ©tron)
283 copy(©tron.self);
286 inline Signal &operator =(
const mcr_Signal ©tron)
297 inline mcr_Signal &operator *()
301 inline const mcr_Signal &operator *()
const 311 void copy(
const mcr_Signal *copytron)
313 if (copytron != &
self) {
315 throw mcr_read_err();
326 throw mcr_read_err();
329 template <
typename T>
330 inline const T *data()
const 332 return reinterpret_cast<const T *
>(
self.instance.data_member.data);
334 template <
typename T>
337 return reinterpret_cast<T *
>(instance().data_member.data);
348 return self.itrigger;
352 return self.instance;
356 return self.interface;
364 mcr_Trigger_receive_fnc trigger =
nullptr,
void *actor =
nullptr)
367 self.itrigger = itrigger;
368 self.trigger = trigger;
392 inline Trigger &operator =(
const mcr_Trigger ©tron)
400 setITrigger(itrigger);
404 inline mcr_Trigger &operator *()
408 inline const mcr_Trigger &operator *()
const 418 void copy(
const mcr_Trigger *copytron)
420 if (copytron != &
self) {
422 throw mcr_read_err();
static int compare(const void *lhsPt, const void *rhsPt)
MCR_API int mcr_Signal_copy(struct mcr_Signal *dstPt, const struct mcr_Signal *srcPt)
void(* mcr_IDispatcher_remove_fnc)(struct mcr_IDispatcher *idispPt, void *remReceiver)
MCR_API void mcr_ITrigger_deinit(struct mcr_ITrigger *itrigPt)
Trigger(const Trigger ©tron)
void copy(const mcr_Trigger *copytron)
void(* mcr_IDispatcher_modify_fnc)(struct mcr_IDispatcher *idispPt, struct mcr_Signal *sigPt, unsigned int *modsPt)
MCR_API void mcr_Signal_init(struct mcr_Signal *signalPt)
Trigger(mcr_ITrigger *itrigger=nullptr, mcr_Trigger_receive_fnc trigger=nullptr, void *actor=nullptr)
static int copy(void *dstPt, const void *srcPt)
MCR_API int mcr_Instance_reset(struct mcr_Instance *instancePt)
Trigger(const mcr_Trigger ©tron)
MCR_API void mcr_Signal_deinit(struct mcr_Signal *signalPt)
static void deallocate(void *dataPt)
MCR_API void mcr_Trigger_deinit(struct mcr_Trigger *trigPt)
Signal(mcr_ISignal *isignal=nullptr, bool dispatchFlag=false)
int(* mcr_signal_fnc)(struct mcr_Signal *signalPt)
MCR_API int mcr_Trigger_copy(struct mcr_Trigger *dstPt, const struct mcr_Trigger *srcPt)
Libmacro, by Jonathan Pelletier, New Paradigm Software. Alpha version.
MCR_API void mcr_Trigger_init(struct mcr_Trigger *triggerPt)
struct mcr_DataMember data_member
int(* mcr_IDispatcher_add_fnc)(struct mcr_IDispatcher *idispPt, struct mcr_Signal *sigPt, void *receiver, mcr_dispatch_receive_fnc receiverFnc)
bool(* mcr_IDispatcher_dispatch_fnc)(struct mcr_IDispatcher *idispPt, struct mcr_Signal *sigPt, unsigned int mods)
MCR_API void mcr_ISignal_deinit(struct mcr_ISignal *isigPt)
void copy(const mcr_Signal *copytron)
static int sendFn(mcr_Signal *signalPt)
#define mcr_dassert(expression)