playlist_list: add _for_each() macros

This commit is contained in:
Max Kellermann 2012-06-12 22:12:06 +02:00
parent d5b9be0393
commit 5665de5ee7
2 changed files with 21 additions and 18 deletions

View File

@ -40,7 +40,7 @@
#include <string.h>
#include <stdio.h>
static const struct playlist_plugin *const playlist_plugins[] = {
const struct playlist_plugin *const playlist_plugins[] = {
&extm3u_playlist_plugin,
&m3u_playlist_plugin,
&xspf_playlist_plugin,
@ -62,6 +62,10 @@ static const struct playlist_plugin *const playlist_plugins[] = {
/** which plugins have been initialized successfully? */
static bool playlist_plugins_enabled[G_N_ELEMENTS(playlist_plugins)];
#define playlist_plugins_for_each_enabled(plugin) \
playlist_plugins_for_each(plugin) \
if (playlist_plugins_enabled[playlist_plugin_iterator - playlist_plugins])
/**
* Find the "playlist" configuration block for the specified plugin.
*
@ -109,9 +113,8 @@ playlist_list_global_init(void)
void
playlist_list_global_finish(void)
{
for (unsigned i = 0; playlist_plugins[i] != NULL; ++i)
if (playlist_plugins_enabled[i])
playlist_plugin_finish(playlist_plugins[i]);
playlist_plugins_for_each_enabled(plugin)
playlist_plugin_finish(plugin);
}
static struct playlist_provider *
@ -200,11 +203,8 @@ playlist_list_open_stream_mime2(struct input_stream *is, const char *mime)
assert(is != NULL);
assert(mime != NULL);
for (unsigned i = 0; playlist_plugins[i] != NULL; ++i) {
const struct playlist_plugin *plugin = playlist_plugins[i];
if (playlist_plugins_enabled[i] &&
plugin->open_stream != NULL &&
playlist_plugins_for_each_enabled(plugin) {
if (plugin->open_stream != NULL &&
plugin->mime_types != NULL &&
string_array_contains(plugin->mime_types, mime)) {
/* rewind the stream, so each plugin gets a
@ -248,11 +248,8 @@ playlist_list_open_stream_suffix(struct input_stream *is, const char *suffix)
assert(is != NULL);
assert(suffix != NULL);
for (unsigned i = 0; playlist_plugins[i] != NULL; ++i) {
const struct playlist_plugin *plugin = playlist_plugins[i];
if (playlist_plugins_enabled[i] &&
plugin->open_stream != NULL &&
playlist_plugins_for_each_enabled(plugin) {
if (plugin->open_stream != NULL &&
plugin->suffixes != NULL &&
string_array_contains(plugin->suffixes, suffix)) {
/* rewind the stream, so each plugin gets a
@ -306,10 +303,8 @@ playlist_suffix_supported(const char *suffix)
{
assert(suffix != NULL);
for (unsigned i = 0; playlist_plugins[i] != NULL; ++i) {
const struct playlist_plugin *plugin = playlist_plugins[i];
if (playlist_plugins_enabled[i] && plugin->suffixes != NULL &&
playlist_plugins_for_each_enabled(plugin) {
if (plugin->suffixes != NULL &&
string_array_contains(plugin->suffixes, suffix))
return true;
}

View File

@ -25,6 +25,14 @@
struct playlist_provider;
struct input_stream;
extern const struct playlist_plugin *const playlist_plugins[];
#define playlist_plugins_for_each(plugin) \
for (const struct playlist_plugin *plugin, \
*const*playlist_plugin_iterator = &playlist_plugins[0]; \
(plugin = *playlist_plugin_iterator) != NULL; \
++playlist_plugin_iterator)
/**
* Initializes all playlist plugins.
*/