ADAPT / lib / include / plan.h
plan.h
Raw
#include <pthread.h>
#include <stdbool.h>

#ifndef PLAN_H
#define PLAN_H

enum PLAN_STATUS {PLAN_STARTED,PLAN_RUNNING, PLAN_DONE, PLAN_STATUS_UNDEF};

struct plan;
struct planner;

typedef void (*plan_run)(struct plan *p);
typedef void (*plan_done)(struct plan *p);

struct plan
{
    pthread_mutex_t lock;
    void *ctx;
    enum PLAN_STATUS status;
    
    //pointer to the planner
    struct planner *pl;

    //function pointer interface
    plan_run run;
    plan_done done;
};

//high level interface
void init_plan(struct plan *p, plan_run run, plan_done done, void *ctx);
void run_plan(struct plan *p);
void destroy_plan(struct plan *p);

//safe accessors
void *plan_get_ctx(struct plan *p);
void plan_set_status(struct plan *p, enum PLAN_STATUS status);
enum PLAN_STATUS plan_get_status(struct plan *p);
struct planner *plan_get_planner(struct plan *p);
void plan_set_planner(struct plan *p, struct planner *pl);



#endif