#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