#include #include #ifndef ARC_PLUGIN_INTERFACE_H #define ARC_PLUGIN_INTERFACE_H 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); #endif