#include <pthread.h> #include "arc_model.h" #include "arc_strategy.h" #include "named_resource.h" //to be replaced with an adaptation controller #include "task_engine.h" #ifndef KNOWLEDGE_BASE #define KNOWLEDGE_BASE #define ARC_KB_PLANS_INIT_MAX 16 #define ARC_KB_STRATS_INIT_MAX 16 #define ARC_KB_RES_INIT_MAX 32 /*TODO: Decide if we want to free res or not in the end. Right now calling knowledge_base_rem_res on something not allocated with malloc will corrupt memory */ struct knowledge_base { /* The architectural model */ struct arc_model *model; /* Resources */ struct named_res **named_res; size_t num_res; size_t max_res; /*Adaptation specifics*/ struct arc_plan **known_plans; size_t num_plans; size_t max_plans; struct arc_strategy **known_strats; size_t num_strats; size_t max_strats; }; void init_knowledge_base(struct knowledge_base *k_b, struct arc_model *model); void destroy_knowledge_base(struct knowledge_base *k_b); void knowledge_base_add_plan(struct knowledge_base *k_b, struct arc_plan *plan); struct arc_plan* knowledge_base_get_plan(struct knowledge_base *k_b, char *plan_name); void knowledge_base_add_strat(struct knowledge_base *k_b, struct arc_strategy *strat); struct arc_strategy* knowledge_base_get_strat(struct knowledge_base *k_b, char *strat_name); void knowledge_base_add_res(struct knowledge_base *k_b, struct named_res *named_res); void* knowledge_base_get_res(struct knowledge_base *k_b, char *name); void knowledge_base_rem_res(struct knowledge_base *k_b, char *name); size_t knowledge_base_num_res(struct knowledge_base *k_b, char *name); void knowledge_base_list_res(struct knowledge_base *k_b); #endif