ADAPT / lib / include / arc_plan.h
arc_plan.h
Raw
#include <stddef.h>

#include "arc_system.h"

#ifndef ARC_PLAN
#define ARC_PLAN


enum ARC_OP
{
    ADD_COMP=0, REM_COMP,
    ADD_INVO, REM_INVO,
    ADD_IFACE, REM_IFACE,
    ADD_SYS_PROP, REM_SYS_PROP,
    ADD_COMP_PROP, REM_COMP_PROP,
    ADD_IFACE_PROP, REM_IFACE_PROP,
};


enum PLAN_RET_CODES
{
    PLAN_OK =0,               //0 
    PLAN_WRONG_ARGS,	      //1 
    PLAN_COMP_EXISTS,	      //2 
    PLAN_COMP_NOT_FOUND,      //3 
    PLAN_INVO_EXISTS,	      //4 
    PLAN_INVO_NOT_FOUND,      //5 
    PLAN_IFACE_EXISTS,	      //6 
    PLAN_IFACE_NOT_FOUND,     //7 
    PLAN_PROP_EXISTS,	      //8 
    PLAN_PROP_NOT_FOUND,      //9 
    PLAN_PROP_INVALID	      //10
};



//All the parser has to do is pretty much fill in an arc_plan structure like the one below
struct arc_plan_action
{
    enum ARC_OP op;
    char **args;
    size_t num_args;
};

//Here I will do a bit of memory copying to keep the args separate than the original text but I don't need more memory than that :)
struct arc_plan
{
    char *plan_name;
    struct arc_plan_action **actions;
    size_t num_actions;
    //ugly hack for parsing, clean up later
    size_t parse_idx;
};

void plan_init(struct arc_plan *plan, char *plan_name);
void plan_destroy(struct arc_plan *plan);
void plan_add_action(struct arc_plan *plan, struct arc_plan_action *action);
void plan_parse_old_dsl(struct arc_plan *plan, char *txt);
int plan_execute(struct arc_plan *plan, struct arc_system *system);

void plan_action_cleanup(struct arc_plan_action *plan_action);

struct arc_plan_action* plan_parse_comp_add(char *args);
struct arc_plan_action* plan_parse_comp_rem(char *args);
struct arc_plan_action* plan_parse_invo_add(char *args);
struct arc_plan_action* plan_parse_invo_rem(char *args);
struct arc_plan_action* plan_parse_iface_add(char *args);
struct arc_plan_action* plan_parse_iface_rem(char *args);
struct arc_plan_action* plan_parse_prop_add(char *args);
struct arc_plan_action* plan_parse_prop_rem(char *args);

int plan_comp_add(struct arc_plan_action *action, struct arc_system *sys);
int plan_comp_rem(struct arc_plan_action *action, struct arc_system *sys);
int plan_invo_add(struct arc_plan_action *action, struct arc_system *sys);
int plan_invo_rem(struct arc_plan_action *action, struct arc_system *sys);
int plan_iface_add(struct arc_plan_action *action, struct arc_system *sys);
int plan_iface_rem(struct arc_plan_action *action, struct arc_system *sys);
int plan_comp_prop_add(struct arc_plan_action *action, struct arc_system *sys);
int plan_comp_prop_rem(struct arc_plan_action *action, struct arc_system *sys);
int plan_sys_prop_add(struct arc_plan_action *action, struct arc_system *sys);
int plan_sys_prop_rem(struct arc_plan_action *action, struct arc_system *sys);
int plan_iface_prop_add(struct arc_plan_action *action, struct arc_system *sys);
int plan_iface_prop_rem(struct arc_plan_action *action, struct arc_system *sys);


const char *plan_return_status(enum PLAN_RET_CODES ret);
void cleanup_plan(struct arc_plan *plan);
#endif