#ifndef VIENNA_RNA_PACKAGE_COMMANDS_H #define VIENNA_RNA_PACKAGE_COMMANDS_H /** * @file commands.h * @ingroup file_utils * @brief Parse and apply different commands that alter the behavior of * secondary structure prediction and evaluation */ /** * @{ * @ingroup file_utils */ /** @brief Typename for the command repesenting data structure #vrna_command_s */ typedef struct vrna_command_s vrna_cmd_t; #include /** * @brief Command parse/apply flag indicating hard constraints * @see #vrna_command_s, vrna_file_commands_read(), vrna_file_commands_apply(), vrna_commands_apply() */ #define VRNA_CMD_PARSE_HC 1U /** * @brief Command parse/apply flag indicating soft constraints * @see #vrna_command_s, vrna_file_commands_read(), vrna_file_commands_apply(), vrna_commands_apply() */ #define VRNA_CMD_PARSE_SC 2U /** * @brief Command parse/apply flag indicating unstructured domains * @see #vrna_command_s, vrna_file_commands_read(), vrna_file_commands_apply(), vrna_commands_apply() */ #define VRNA_CMD_PARSE_UD 4U /** * @brief Command parse/apply flag indicating structured domains * @see #vrna_command_s, vrna_file_commands_read(), vrna_file_commands_apply(), vrna_commands_apply() */ #define VRNA_CMD_PARSE_SD 8U /** * @brief Command parse/apply flag indicating default set of commands * @see #vrna_command_s, vrna_file_commands_read(), vrna_file_commands_apply(), vrna_commands_apply() */ #define VRNA_CMD_PARSE_DEFAULTS ( VRNA_CMD_PARSE_HC \ | VRNA_CMD_PARSE_SC \ | VRNA_CMD_PARSE_UD \ | VRNA_CMD_PARSE_SD \ ) /** * @brief Types of commands within a list of #vrna_command_s structures */ typedef enum { VRNA_CMD_ERROR=-1, VRNA_CMD_LAST=0, VRNA_CMD_HC, VRNA_CMD_SC, VRNA_CMD_MOTIF, VRNA_CMD_UD, VRNA_CMD_SD } vrna_command_e; /** * @brief List element for commands ready for application to a #vrna_fold_compound_t * @see vrna_file_commands_read(), vrna_commands_apply(), vrna_commands_free() */ struct vrna_command_s { vrna_command_e type; void *data; }; /** * @brief Extract a list of commands from a command file * * Read a list of commands specified in the input file * and return them as list of abstract commands * * @see vrna_commands_apply(), vrna_file_commands_apply(), * vrna_commands_free() * * @param filename The filename * @param options Options to limit the type of commands read from the file * @return A list of abstract commands */ vrna_cmd_t *vrna_file_commands_read(const char *filename, unsigned int options); /** * @brief Apply a list of commands from a command file * * This function is a shortcut to directly parse a commands file * and apply all successfully parsed commands to a #vrna_fold_compound_t * data structure. It is the same as: * @snippet commands.c Applying commands from file * * @param vc The #vrna_fold_compound_t the command list will be applied to * @param filename The filename * @param options Options to limit the type of commands read from the file * @return The number of commands successfully applied */ int vrna_file_commands_apply( vrna_fold_compound_t *vc, const char *filename, unsigned int options); /** * @brief Apply a list of commands to a #vrna_fold_compound_t * * @param vc The #vrna_fold_compound_t the command list will be applied to * @param commands The list of commands to apply * @param options Options to limit the type of commands read from the file * @return The number of commands successfully applied */ int vrna_commands_apply(vrna_fold_compound_t *vc, vrna_cmd_t *commands, unsigned int options); /** * @brief Free memory occupied by a list of commands * * Release memory occupied by a list of commands * @param commands A pointer to a list of commands */ void vrna_commands_free( vrna_cmd_t *commands); /** * @} */ #endif