Libmacro  0.2
Libmacro is an extensible macro and hotkey library.
dispatch.h File Reference

Related to idispatcher.h. More...

#include "mcr/base/types.h"

Go to the source code of this file.

Functions

MCR_API int mcr_dispatch_lock (struct mcr_context *ctx)
 
MCR_API int mcr_dispatch_unlock (struct mcr_context *ctx)
 
MCR_API bool mcr_dispatch (struct mcr_context *ctx, struct mcr_Signal *sigPt)
 Blocking signal intercept. More...
 
MCR_API int mcr_dispatch_set_dispatchers (struct mcr_context *ctx, struct mcr_IDispatcher **dispatchers, size_t count)
 
MCR_API void mcr_dispatch_set_generic_dispatcher (struct mcr_context *ctx, struct mcr_IDispatcher *dispatcherPt)
 
MCR_API size_t mcr_dispatch_count (struct mcr_context *ctx)
 
MCR_API bool mcr_dispatch_enabled (struct mcr_context *ctx, struct mcr_ISignal *isigPt)
 
MCR_API void mcr_dispatch_set_enabled (struct mcr_context *ctx, struct mcr_ISignal *typePt, bool enableFlag)
 
MCR_API void mcr_dispatch_set_enabled_all (struct mcr_context *ctx, bool enableFlag)
 
MCR_API int mcr_dispatch_add (struct mcr_context *ctx, struct mcr_Signal *interceptPt, void *receiver, mcr_dispatch_receive_fnc receiveFnc)
 
MCR_API int mcr_dispatch_add_generic (struct mcr_context *ctx, struct mcr_Signal *interceptPt, void *receiver, mcr_dispatch_receive_fnc receiveFnc)
 
MCR_API void mcr_dispatch_clear (struct mcr_context *ctx, struct mcr_ISignal *isigPt)
 
MCR_API void mcr_dispatch_clear_all (struct mcr_context *ctx)
 
MCR_API void mcr_dispatch_modify (struct mcr_context *ctx, struct mcr_Signal *sigPt, unsigned int *modifiersPt)
 Modify modifiers without dispatching. More...
 
MCR_API void mcr_dispatch_remove (struct mcr_context *ctx, struct mcr_ISignal *typePt, void *remReceiver)
 
MCR_API void mcr_dispatch_remove_all (struct mcr_context *ctx, void *remReceiver)
 
MCR_API void mcr_dispatch_trim (struct mcr_context *ctx, struct mcr_ISignal *isigPt)
 
MCR_API void mcr_dispatch_trim_all (struct mcr_context *ctx)
 

Detailed Description

Related to idispatcher.h.

Dispatchers are the consumers of modifiers.

Definition in file dispatch.h.

Function Documentation

§ mcr_dispatch()

MCR_API bool mcr_dispatch ( struct mcr_context ctx,
struct mcr_Signal sigPt 
)

Blocking signal intercept.

Precondition
mcr_IDispatcher::dispatch must be set Dispatch with signal and known modifiers into mcr_IDispatcher::dispatch
Parameters
sigPtopt Object to dispatch, and possibly block sending
Returns
True to block

§ mcr_dispatch_add()

MCR_API int mcr_dispatch_add ( struct mcr_context ctx,
struct mcr_Signal interceptPt,
void *  receiver,
mcr_dispatch_receive_fnc  receiveFnc 
)

Add a receiver to the dispatch for given signal.

Parameters
interceptPtopt Used for dispatch logic and to find the dispatcher to add to
receiveropt If null the receiverFnc will be sent with a null pointer. This must be set for null receiver function, or mcr_Trigger_receive
receiveFncopt If null mcr_Trigger_receive will be used. If receiver is not set, then this cannot be used with mcr_Trigger_receive.
Returns
reterr

§ mcr_dispatch_add_generic()

MCR_API int mcr_dispatch_add_generic ( struct mcr_context ctx,
struct mcr_Signal interceptPt,
void *  receiver,
mcr_dispatch_receive_fnc  receiveFnc 
)

Add a receiver to the generic dispatcher

The generic dispatcher is dispatched for all signals. If a signal is provided the address will be used for dispatch logic.

Parameters
interceptPtopt Used for dispatch logic
receiveropt If null the receiverFnc will be sent with a null pointer. This must be set for null receiver function, or mcr_Trigger_receive
receiveFncopt If null mcr_Trigger_receive will be used. If receiver is not set, then this cannot be used with mcr_Trigger_receive.
Returns
reterr

§ mcr_dispatch_clear()

MCR_API void mcr_dispatch_clear ( struct mcr_context ctx,
struct mcr_ISignal isigPt 
)

Remove all receivers for a signal type

Parameters
isigPtopt Signal type to remove receivers for
Returns
reterr

§ mcr_dispatch_clear_all()

MCR_API void mcr_dispatch_clear_all ( struct mcr_context ctx)

Remove all receivers for all registered dispatchers

Returns
reterr

§ mcr_dispatch_count()

MCR_API size_t mcr_dispatch_count ( struct mcr_context ctx)

Get the number of registered dispatchers, including null values

Returns
retind

§ mcr_dispatch_enabled()

MCR_API bool mcr_dispatch_enabled ( struct mcr_context ctx,
struct mcr_ISignal isigPt 
)

Dispatching enabled for a signal type

Parameters
isigPtopt Signal interface
Returns
True if signal interface has a dispatcher

§ mcr_dispatch_lock()

MCR_API int mcr_dispatch_lock ( struct mcr_context ctx)

Enter dispatch critical section. Do not modify dispatchers or receivers in the middle of dispatch.

Returns
reterr

§ mcr_dispatch_modify()

MCR_API void mcr_dispatch_modify ( struct mcr_context ctx,
struct mcr_Signal sigPt,
unsigned int *  modifiersPt 
)

Modify modifiers without dispatching.

Precondition
mcr_IDispatcher::dispatch must be set If mcr_base.generic_dispatcher_flag then the generic dispatcher will be used as well. mcr_IDispatcher::modifier
Parameters
sigPtopt Find mcr_IDispatcher and use in modifier function.

§ mcr_dispatch_remove()

MCR_API void mcr_dispatch_remove ( struct mcr_context ctx,
struct mcr_ISignal typePt,
void *  remReceiver 
)

Remove a receiver callback for a signal type.

Parameters
typePtopt Signal type to remove from
remReceiveropt The receiver callback to be removed
Returns
reterr

§ mcr_dispatch_remove_all()

MCR_API void mcr_dispatch_remove_all ( struct mcr_context ctx,
void *  remReceiver 
)

Remove a receiver callback for all signal types.

Parameters
remReceiveropt The receiver object to be removed
Returns
reterr

§ mcr_dispatch_set_dispatchers()

MCR_API int mcr_dispatch_set_dispatchers ( struct mcr_context ctx,
struct mcr_IDispatcher **  dispatchers,
size_t  count 
)

Set mcr_base::dispatchers and mcr_base::dispatcher_count.

Will lock dispatch in this function.

Returns
reterr

§ mcr_dispatch_set_enabled()

MCR_API void mcr_dispatch_set_enabled ( struct mcr_context ctx,
struct mcr_ISignal typePt,
bool  enableFlag 
)

Enable dispatching from the given signal type.

Parameters
typePtopt Signal interface to enable dispatch
enableTrue to set the correct dispatcher for the signal interface. Otherwise set the signal interface dispatcher to null.

§ mcr_dispatch_set_enabled_all()

MCR_API void mcr_dispatch_set_enabled_all ( struct mcr_context ctx,
bool  enableFlag 
)

Set dispatching enabled for all registered dispatchers

Parameters
enableTrue to set the correct dispatcher for all signal interfaces. Otherwise set the signal interface dispatchers are set to null.

§ mcr_dispatch_set_generic_dispatcher()

MCR_API void mcr_dispatch_set_generic_dispatcher ( struct mcr_context ctx,
struct mcr_IDispatcher dispatcherPt 
)

§ mcr_dispatch_trim()

MCR_API void mcr_dispatch_trim ( struct mcr_context ctx,
struct mcr_ISignal isigPt 
)

Minimize allocation for a signal type.

Parameters
isigPtopt Signal type to minimize
Returns
reterr

§ mcr_dispatch_trim_all()

MCR_API void mcr_dispatch_trim_all ( struct mcr_context ctx)

Minimize allocation for all dispatchers.

Returns
reterr

§ mcr_dispatch_unlock()

MCR_API int mcr_dispatch_unlock ( struct mcr_context ctx)

Exit dispatch critical section. Do not modify dispatchers or receivers in the middle of dispatch.

Returns
reterr