ADAPT / plugins / arc_plugin_interface.h
arc_plugin_interface.h
Raw
#include <stdbool.h>
#include <pthread.h>

#ifndef ARC_PLUGIN_INTERFACE_H
#define ARC_PLUGIN_INTERFACE_H

struct list_node
{
    void *elem;
    struct list_node *next;
};

void list_node_init(struct list_node *l_n, void *elem);

struct list
{
    struct list_node *head, *tail;
    size_t len;
};

void list_init(struct list *l);
void list_tail_add(struct list *l, struct list_node *l_n);
void list_head_add(struct list *l, struct list_node *l_n);
struct list_node *list_rem(struct list *l);

enum value_type {V_INT=0,V_DOUBLE,V_STRING,V_INVALID};

struct arc_value
{
    enum value_type type;
    union
    {
	int v_int;
	double v_dbl;
	char *v_str;
    };
};


//To share this file with plugins without much baggage
struct arc_system;
struct arc_model
{
    struct arc_system *sys;
    pthread_mutex_t sys_lock;
};



void init_model(struct arc_model *model, struct arc_system *sys);
void destroy_model(struct arc_model *model);

bool arc_model_add_component(struct arc_model *a_m, char *name);
bool arc_model_add_interface(struct arc_model *a_m, char *component, char *name);
bool arc_model_add_invocation(struct arc_model *a_m, char *qual_from, char *qual_to);
bool arc_model_rem_component(struct arc_model *a_m, char *name);
bool arc_model_rem_interface(struct arc_model *a_m, char *component, char *name);
bool arc_model_rem_invocation(struct arc_model *a_m, char *qual_from, char *qual_to);

//The qualified name stuff is implemented a bit crudely, see if we can make it any better at some point.
bool arc_model_assign_property_int(struct arc_model *a_m, char *qual_name, int val);
bool arc_model_assign_property_dbl(struct arc_model *a_m, char *qual_name, double val);
bool arc_model_assign_property_str(struct arc_model *a_m, char *qual_name, char *val);
bool arc_model_remove_property(struct arc_model *a_m, char *qual_name);
const struct arc_value arc_model_get_property(struct arc_model *a_m, char *qual_name);

struct list arc_model_find_components(struct arc_model *a_m, char *p, struct arc_value v);
struct list arc_model_find_interfaces(struct arc_model *a_m, char *c, char *p, struct arc_value v);

#endif