#include #ifndef ANALYSIS_H #define ANALYSIS_H enum ANALYSIS_STATUS {ANALYSIS_STARTED,ANALYSIS_RUNNING, ANALYSIS_DONE, ANALYSIS_STATUS_UNDEF}; struct analysis; struct analyzer; typedef void (*analysis_run)(struct analysis *a); typedef void (*analysis_done)(struct analysis *a); struct analysis { pthread_mutex_t lock; void *ctx; void *res; enum ANALYSIS_STATUS status; //pointer to the analyzer struct analyzer *az; //function pointer interface analysis_run run; analysis_done done; }; //high level interface void init_analysis(struct analysis *ana, analysis_run run, analysis_done done, void *ctx); void run_analysis(struct analysis *ana); void destroy_analysis(struct analysis *ana); //safe accessors void *analysis_get_ctx(struct analysis *ana); void analysis_set_status(struct analysis *ana, enum ANALYSIS_STATUS status); enum ANALYSIS_STATUS analysis_get_status(struct analysis *ana); struct analyzer *analysis_get_analyzer(struct analysis *ana); void analysis_set_analyzer(struct analysis *ana, struct analyzer *az); void *analysis_get_result(struct analysis *ana); #endif