1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- /*
- * Copyright (C) 2020 Weber Yann
- *
- * This file is part of pyrpn.
- *
- * pyrpn is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * any later version.
- *
- * pyrpn is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with pyrpn. If not, see <http://www.gnu.org/licenses/>.
- */
- #ifndef __rpn_mutation__h__
- #define __rpn_mutation__h__
-
- #include <stddef.h>
-
- #include "rpn_jit.h"
-
- /**@defgroup mutation RPN expression mutation
- * @ingroup rpn
- */
- /**@file rpn_mutation.h
- * @brief Contains structures and function to mutate RPN epxressions
- */
-
-
- /**@brief Defines mutation actions types */
- enum rpn_mutation_op_e {
- /**@brief Mutation action : delete a token */
- RPN_del,
- /**@brief Mutation action : add a token */
- RPN_add,
- /**@brief Mutation action : change a token */
- RPN_chg,
- /**@brief Mutation action : update a token (same type, different value) */
- RPN_upd
- };
-
- /**@brief Shortcut for struct @ref rpn_mutation_profile_s */
- typedef struct rpn_mutation_profile_s rpn_mutation_profile_t;
-
- /**@brief Stores mutation informations
- * @ingroup mutation
- */
- struct rpn_mutation_profile_s
- {
- /**@brief Size of @ref rpn_mutation_profile_s::mods attribute */
- size_t mods_sz;
-
- /**@brief Modification possibilities
- *
- * One value is picked up randomly from this list to determine
- * the type of mutation : addition, deletion, modification, value change
- */
- unsigned char mods[];
- };
-
- /**@brief Default mutation profile */
- extern const rpn_mutation_profile_t rpn_default_mutprof;
-
- /**@brief Shortcut for @ref rpn_expr_mutation_p with a @ref rpn_default_mutprof
- * @ingroup mutation */
- rpn_expr_t* rpn_expr_mutation(rpn_expr_t *src, size_t mutations);
-
- /**@brief Generate a new expression by applying mutations to a source
- * expression
- * @param src Source expression
- * @param mutations number of mutations
- * @param prof Mutation profile
- * @return A new instance of rpn_expr_t ready to be evaluate
- * @ingroup mutation
- */
- rpn_expr_t* rpn_expr_mutation_p(rpn_expr_t *src, size_t mutations,
- const rpn_mutation_profile_t *prof);
-
- #endif
|