\author K
\date 2016
- ------------------------------------------------------------------------------*/
+ -----------------------------------------------------------------------------*/
#ifndef _TRIGGER_H_
#define _TRIGGER_H_
-/* Function trigger stack for "unwinding" initialization of modules */
+/** The number of trigger functions per trigger */
#ifndef MAX_TRIGGER_FUNCS
#define MAX_TRIGGER_FUNCS 15
#endif
/* Internal macro prototypes */
-#define _TRIGGER_POP(TARG) --TARG.num_funcs
+#define _TRIGGER_DEL(TARG) --TARG.num_funcs
+#define _TRIGGER_POP(TARG) (TARG.func[_TRIGGER_DEL(TARG)])()
#define _TRIGGER_SET(TARG, FUNC) TARG.func[TARG.num_funcs++] = FUNC
-#define _TRIGGER(TARG) while(TARG.num_funcs) (TARG.func[TRIGGER_POP(TARG)])()
+#define _TRIGGER(TARG) while(TARG.num_funcs) TRIGGER_POP(TARG)
/* If TRIGGERS is not defined, use only a default trigger and define shorthand
- functions for easy use.
-*******************************************************************************/
+ functions for easy use. */
#ifndef TRIGGERS
#define TRIGGERS default_trigger
+#define TRIGGER_DEL() _TRIGGER_DEL(default_trigger)
#define TRIGGER_POP() _TRIGGER_POP(default_trigger)
#define TRIGGER_SET(FUNC) _TRIGGER_SET(default_trigger, FUNC)
#define TRIGGER() _TRIGGER(default_trigger)
#else
+#define TRIGGER_DEL(TARG) _TRIGGER_DEL(TARG)
#define TRIGGER_POP(TARG) _TRIGGER_POP(TARG)
#define TRIGGER_SET(TARG,FUNC) _TRIGGER_SET(TARG,FUNC)
#define TRIGGER(TARG) _TRIGGER(TARG)