#include #include #ifndef EXECUTION_COMMAND_H #define EXECUTION_COMMAND_H enum EXEC_CMD_STATUS {CMD_CREAT=0, CMD_PROC, CMD_DONE, CMD_FAIL, CMD_INVALID }; struct executor; struct exec_cmd; typedef void (*cmd_run)(struct exec_cmd *cmd); typedef void (*cmd_done)(struct exec_cmd *cmd); struct exec_cmd { //lock pthread_mutex_t lock; //status and context enum EXEC_CMD_STATUS status; void *ctx; //just make pointer available struct executor *exec; //func ptrs cmd_run run; cmd_done done; }; void exec_cmd_init(struct exec_cmd *cmd, cmd_run run, cmd_done done, void *ctx); void exec_cmd_destroy(struct exec_cmd *cmd); void exec_cmd_run(struct exec_cmd *cmd); //safe accessors void *cmd_get_ctx(struct exec_cmd *cmd); void cmd_set_status(struct exec_cmd *cmd, enum EXEC_CMD_STATUS status); enum EXEC_CMD_STATUS cmd_get_status(struct exec_cmd *cmd); struct executor *cmd_get_executor(struct exec_cmd *cmd); void cmd_set_executor(struct exec_cmd *cmd, struct executor *exec); #endif