aboutsummaryrefslogtreecommitdiff
path: root/libcrystfel
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2024-01-30 12:30:28 +0100
committerThomas White <taw@physics.org>2024-02-06 16:59:34 +0100
commit967b72ba6e6243f1342232401f7109e4f225d2d3 (patch)
tree803d891c07a54116d4afd35742c4e672997fd11d /libcrystfel
parent1b8abebf8bf37d5d57ed55816223d95557b7f844 (diff)
Add free_reflistiterator()
This enables early exit from iteration over a RefList.
Diffstat (limited to 'libcrystfel')
-rw-r--r--libcrystfel/src/reflist.c17
-rw-r--r--libcrystfel/src/reflist.h1
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);