#ifndef RTREACTIVETASK_H
#define RTREACTIVETASK_H

/******************************************************************************/
/******************************************************************************/
/*****************     Copyright 2004, 2005 Chronolytics Inc.   ***************/
/*****************     All Right Reserved                       ***************/
/******************************************************************************/
/******************************************************************************/

#include <RTCommon.h>
#include <RTEvent.h>

static volatile const char __attribute__ ((unused)) rcsid_RTREACTIVETASK_H[] = "$Id: RTReactiveTask.h,v 1.10 2005/06/29 15:53:29 dave Exp $";

typedef struct {
   RTMagic magic;    /* my magic */
   RTEventQueue eq;  /* my bound event queue */
   RTEvent *evp;     /* event description */
} RTReactiveTask;

#define RTReactiveTask_MAGIC  MAGIC("RTsk")  /* user abstraction RTReactiveTask *

/* use default ReactiveTask argument */
void RTReactiveTask_React(RTReactiveTask *rtp); /* enqueue builtin */
void RTReactiveTask_React_Stamped(RTReactiveTask *rtp,  RTClockCount timestamp); /* enqueue builtin */


/* use passed in argument for event */
void RTReactiveTask_Activate(RTReactiveTask *rtp, void *arg);
void RTReactiveTask_Activate_Stamped(RTReactiveTask *rtp, void *arg,  RTClockCount timestamp);

void RTReactiveTask_Free(RTReactiveTask *rtp);

RTReactiveTask *RTReactiveTask_Constructor(RTEventQueue eq, RTEvent *evp);
RTReactiveTask *RTReactiveTask_Clone(RTReactiveTask *rtp);


int RTReactiveTask_Validate_Fails(RTReactiveTask *rtp);

INLINE_VALIDATE(RTReactiveTask, RTReactiveTask_Validate_Fails);

#endif /* RTREACTIVETASK_H */


