diff options
Diffstat (limited to 'src/arch')
-rw-r--r-- | src/arch/instriter.c | 35 | ||||
-rw-r--r-- | src/arch/instriter.h | 3 |
2 files changed, 38 insertions, 0 deletions
diff --git a/src/arch/instriter.c b/src/arch/instriter.c index db322a2..d968ba8 100644 --- a/src/arch/instriter.c +++ b/src/arch/instriter.c @@ -81,6 +81,41 @@ instr_iter_t *create_instruction_iterator(GArchProcessor *proc, size_t index) /****************************************************************************** * * +* Paramètres : iter = itérateur à copie. * +* * +* Description : Duplique un itérateur de parcours d'instructions existant. * +* * +* Retour : Itérateur prêt à emploi. * +* * +* Remarques : - * +* * +******************************************************************************/ + +instr_iter_t *copy_instruction_iterator(const instr_iter_t *iter) +{ + instr_iter_t *result; /* Structure à retourner */ + + result = (instr_iter_t *)malloc(sizeof(instr_iter_t)); + + g_object_ref(G_OBJECT(iter->proc)); + + result->proc = iter->proc; + result->stamp = iter->stamp; + + result->index = iter->index; + + result->is_restricted = iter->is_restricted; + + if (result->is_restricted) + copy_mrange(&result->restriction, &iter->restriction); + + return result; + +} + + +/****************************************************************************** +* * * Paramètres : iter = itérateur à traiter. * * * * Description : Détruit un itérateur mis en place. * diff --git a/src/arch/instriter.h b/src/arch/instriter.h index 1a0003f..68db9cb 100644 --- a/src/arch/instriter.h +++ b/src/arch/instriter.h @@ -39,6 +39,9 @@ typedef struct _instr_iter_t instr_iter_t; /* Construit un itérateur pour parcourir des instructions. */ instr_iter_t *create_instruction_iterator(GArchProcessor *, size_t); +/* Duplique un itérateur de parcours d'instructions existant. */ +instr_iter_t *copy_instruction_iterator(const instr_iter_t *); + /* Détruit un itérateur mis en place. */ void delete_instruction_iterator(instr_iter_t *); |