From edbfa46cbc01bfbb1f7f1b624aaeae635408528c Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 12 Jun 2012 20:39:53 +0200 Subject: encoder_list: add macro _for_each() --- src/encoder_list.c | 12 ++++++------ src/encoder_list.h | 8 ++++++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/encoder_list.c b/src/encoder_list.c index dea72650..da1bec5e 100644 --- a/src/encoder_list.c +++ b/src/encoder_list.c @@ -30,7 +30,7 @@ extern const struct encoder_plugin twolame_encoder_plugin; extern const struct encoder_plugin wave_encoder_plugin; extern const struct encoder_plugin flac_encoder_plugin; -static const struct encoder_plugin *const encoder_plugins[] = { +const struct encoder_plugin *const encoder_plugins[] = { &null_encoder_plugin, #ifdef ENABLE_VORBIS_ENCODER &vorbis_encoder_plugin, @@ -53,9 +53,9 @@ static const struct encoder_plugin *const encoder_plugins[] = { const struct encoder_plugin * encoder_plugin_get(const char *name) { - for (unsigned i = 0; encoder_plugins[i] != NULL; ++i) - if (strcmp(encoder_plugins[i]->name, name) == 0) - return encoder_plugins[i]; + encoder_plugins_for_each(plugin) + if (strcmp(plugin->name, name) == 0) + return plugin; return NULL; } @@ -63,8 +63,8 @@ encoder_plugin_get(const char *name) void encoder_plugin_print_all_types(FILE * fp) { - for (unsigned i = 0; encoder_plugins[i] != NULL; ++i) - fprintf(fp, "%s ", encoder_plugins[i]->name); + encoder_plugins_for_each(plugin) + fprintf(fp, "%s ", plugin->name); fprintf(fp, "\n"); fflush(fp); diff --git a/src/encoder_list.h b/src/encoder_list.h index 95f85300..4fe87e16 100644 --- a/src/encoder_list.h +++ b/src/encoder_list.h @@ -24,6 +24,14 @@ struct encoder_plugin; +extern const struct encoder_plugin *const encoder_plugins[]; + +#define encoder_plugins_for_each(plugin) \ + for (const struct encoder_plugin *plugin, \ + *const*encoder_plugin_iterator = &encoder_plugins[0]; \ + (plugin = *encoder_plugin_iterator) != NULL; \ + ++encoder_plugin_iterator) + /** * Looks up an encoder plugin by its name. * -- cgit v1.2.3