diff options
author | Thomas White <taw@physics.org> | 2024-01-30 12:30:28 +0100 |
---|---|---|
committer | Thomas White <taw@physics.org> | 2024-02-06 16:59:34 +0100 |
commit | 967b72ba6e6243f1342232401f7109e4f225d2d3 (patch) | |
tree | 803d891c07a54116d4afd35742c4e672997fd11d /libcrystfel | |
parent | 1b8abebf8bf37d5d57ed55816223d95557b7f844 (diff) |
Add free_reflistiterator()
This enables early exit from iteration over a RefList.
Diffstat (limited to 'libcrystfel')
-rw-r--r-- | libcrystfel/src/reflist.c | 17 | ||||
-rw-r--r-- | libcrystfel/src/reflist.h | 1 |
2 files changed, 16 insertions, 2 deletions
diff --git a/libcrystfel/src/reflist.c b/libcrystfel/src/reflist.c index 9ad41c5e..7a66bf9f 100644 --- a/libcrystfel/src/reflist.c +++ b/libcrystfel/src/reflist.c @@ -1180,8 +1180,7 @@ const Reflection *next_refl_const(const Reflection *refl, RefListIterator *iter) } if ( iter->stack_ptr == 0 ) { - free(iter->stack_const); - free(iter); + free_reflistiterator(iter); return NULL; } @@ -1190,6 +1189,20 @@ const Reflection *next_refl_const(const Reflection *refl, RefListIterator *iter) } while ( 1 ); } + +void free_reflistiterator(RefListIterator *iter) +{ + if ( iter != NULL ) { + if ( iter->is_const ) { + cffree(iter->stack_const); + } else { + cffree(iter->stack); + } + cffree(iter); + } +} + + /*********************************** Voodoo ***********************************/ static int recursive_depth(Reflection *refl) diff --git a/libcrystfel/src/reflist.h b/libcrystfel/src/reflist.h index 864e871d..5bba2e80 100644 --- a/libcrystfel/src/reflist.h +++ b/libcrystfel/src/reflist.h @@ -158,6 +158,7 @@ extern void add_refl_to_list(Reflection *refl, RefList *list); /* Iteration */ extern Reflection *first_refl(RefList *list, RefListIterator **piter); extern Reflection *next_refl(Reflection *refl, RefListIterator *iter); +extern void free_reflistiterator(RefListIterator *iter); extern const Reflection *first_refl_const(const RefList *list, RefListIterator **piter); extern const Reflection *next_refl_const(const Reflection *refl, RefListIterator *iter); |