ADAPT / lib / include / task.h
task.h
Raw
#include <pthread.h>
#include <stdint.h>

#ifndef TASK_H
#define TASK_H

/* 
 This is a tiny task implementation
*/


enum TASK_STATUS
{
    TASK_CREATED,
    TASK_RUNNING,
    TASK_COMPLETE,
    TASK_ABORTED,
    TASK_STATUS_UNKNOWN
};

//forward declare to make it a bit easier to read
struct task;

typedef void (*task_run_fn)(struct task *task);
typedef void  (*task_done_fn)(struct task *task);




void create_task(struct task *task,
		 uint32_t task_id,
		 task_run_fn run,
		 task_done_fn done,
		 void *task_ctx,
		 void *cb_ctx);
//void create_task_defaults(struct task *task, uint32_t task_id, task_run run, void *task_ctx);
void destroy_task(struct task *task);


//thread_safe functions - all of these are inline functions acquiring and releasing the lock as needed
uint32_t task_get_id(struct task *task);
enum TASK_STATUS task_get_status(struct task *task);
void task_set_status(struct task *task, enum TASK_STATUS status);
//returns the task_ctx
void *task_get_ctx(struct task *task);
//returns the cb_ctx
void *task_get_cb_ctx(struct task *task);

void task_done(struct task *task);
void task_run(struct task *task);

//convenience function if we actually decide to make the struct opaque
size_t get_task_struct_size();

//shared among different execution engines
struct task_entry
{
    struct task *task;
    struct task_entry *next;
};

enum RUNNING_TASK_STATE {R_T_NONE,R_T_RUNNING, R_T_PAUSED, R_T_ABORTED};


//defaults
void default_task_init(struct task *task);
void default_task_done(struct task *task);

#endif