From bb04c6342e692b39d04126940570a5ade9ca371a Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 7 Oct 2008 22:07:29 +0200 Subject: songvec: add songvec_for_each iterator This is so we can more consistently deal with locking needed for thread-safety in iterator functions. --- src/songvec.c | 13 +++++++++++++ src/songvec.h | 2 ++ 2 files changed, 15 insertions(+) diff --git a/src/songvec.c b/src/songvec.c index 8e3b9b955..dd188f46c 100644 --- a/src/songvec.c +++ b/src/songvec.c @@ -66,3 +66,16 @@ void songvec_destroy(struct songvec *sv) } sv->nr = 0; } + +int songvec_for_each(struct songvec *sv, int (*fn)(Song *, void *), void *arg) +{ + int i; + Song **sp = sv->base; + + for (i = sv->nr; --i >= 0; ) { + if (fn(*sp++, arg) < 0) + return -1; + } + + return 0; +} diff --git a/src/songvec.h b/src/songvec.h index 47b5ea6c0..dbe6be508 100644 --- a/src/songvec.h +++ b/src/songvec.h @@ -19,4 +19,6 @@ void songvec_add(struct songvec *sv, Song *add); void songvec_destroy(struct songvec *sv); +int songvec_for_each(struct songvec *sv, int (*fn)(Song *, void *), void *arg); + #endif /* SONGVEC_H */ -- cgit v1.2.3