aboutsummaryrefslogtreecommitdiffstats
path: root/src/config/ConfigTemplates.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/config/ConfigTemplates.cxx')
-rw-r--r--src/config/ConfigTemplates.cxx162
1 files changed, 96 insertions, 66 deletions
diff --git a/src/config/ConfigTemplates.cxx b/src/config/ConfigTemplates.cxx
index 58ee56425..cd353dc19 100644
--- a/src/config/ConfigTemplates.cxx
+++ b/src/config/ConfigTemplates.cxx
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2003-2014 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
* http://www.musicpd.org
*
* This program is free software; you can redistribute it and/or modify
@@ -19,80 +19,110 @@
#include "ConfigTemplates.hxx"
#include "ConfigOption.hxx"
+#include "util/Macros.hxx"
#include <string.h>
-const ConfigTemplate config_templates[] = {
- { "music_directory", false, false },
- { "playlist_directory", false, false },
- { "follow_inside_symlinks", false, false },
- { "follow_outside_symlinks", false, false },
- { "db_file", false, false },
- { "sticker_file", false, false },
- { "log_file", false, false },
- { "pid_file", false, false },
- { "state_file", false, false },
- { "state_file_interval", false, false },
- { "restore_paused", false, false },
- { "user", false, false },
- { "group", false, false },
- { "bind_to_address", true, false },
- { "port", false, false },
- { "log_level", false, false },
- { "zeroconf_name", false, false },
- { "zeroconf_enabled", false, false },
- { "password", true, false },
- { "default_permissions", false, false },
- { "audio_output", true, true },
- { "audio_output_format", false, false },
- { "mixer_type", false, false },
- { "replaygain", false, false },
- { "replaygain_preamp", false, false },
- { "replaygain_missing_preamp", false, false },
- { "replaygain_limit", false, false },
- { "volume_normalization", false, false },
- { "samplerate_converter", false, false },
- { "audio_buffer_size", false, false },
- { "buffer_before_play", false, false },
- { "http_proxy_host", false, false },
- { "http_proxy_port", false, false },
- { "http_proxy_user", false, false },
- { "http_proxy_password", false, false },
- { "connection_timeout", false, false },
- { "max_connections", false, false },
- { "max_playlist_length", false, false },
- { "max_command_list_size", false, false },
- { "max_output_buffer_size", false, false },
- { "filesystem_charset", false, false },
- { "id3v1_encoding", false, false },
- { "metadata_to_use", false, false },
- { "save_absolute_paths_in_playlists", false, false },
- { "decoder", true, true },
- { "input", true, true },
- { "gapless_mp3_playback", false, false },
- { "playlist_plugin", true, true },
- { "auto_update", false, false },
- { "auto_update_depth", false, false },
- { "despotify_user", false, false },
- { "despotify_password", false, false},
- { "despotify_high_bitrate", false, false },
- { "filter", true, true },
- { "database", false, true },
- { "neighbors", true, true },
+const ConfigTemplate config_param_templates[] = {
+ { "music_directory" },
+ { "playlist_directory" },
+ { "follow_inside_symlinks" },
+ { "follow_outside_symlinks" },
+ { "db_file" },
+ { "sticker_file" },
+ { "log_file" },
+ { "pid_file" },
+ { "state_file" },
+ { "state_file_interval" },
+ { "restore_paused" },
+ { "user" },
+ { "group" },
+ { "bind_to_address", true },
+ { "port" },
+ { "log_level" },
+ { "zeroconf_name" },
+ { "zeroconf_enabled" },
+ { "password", true },
+ { "default_permissions" },
+ { "audio_output_format" },
+ { "mixer_type" },
+ { "replaygain" },
+ { "replaygain_preamp" },
+ { "replaygain_missing_preamp" },
+ { "replaygain_limit" },
+ { "volume_normalization" },
+ { "samplerate_converter" },
+ { "audio_buffer_size" },
+ { "buffer_before_play" },
+ { "http_proxy_host", false, true },
+ { "http_proxy_port", false, true },
+ { "http_proxy_user", false, true },
+ { "http_proxy_password", false, true },
+ { "connection_timeout" },
+ { "max_connections" },
+ { "max_playlist_length" },
+ { "max_command_list_size" },
+ { "max_output_buffer_size" },
+ { "filesystem_charset" },
+ { "id3v1_encoding", false, true },
+ { "metadata_to_use" },
+ { "save_absolute_paths_in_playlists" },
+ { "gapless_mp3_playback" },
+ { "auto_update" },
+ { "auto_update_depth" },
+ { "despotify_user", false, true },
+ { "despotify_password", false, true },
+ { "despotify_high_bitrate", false, true },
};
-static constexpr unsigned n_config_templates =
- sizeof(config_templates) / sizeof(config_templates[0]);
+static constexpr unsigned n_config_param_templates =
+ ARRAY_SIZE(config_param_templates);
-static_assert(n_config_templates == unsigned(CONF_MAX),
- "Wrong number of config_templates");
+static_assert(n_config_param_templates == unsigned(ConfigOption::MAX),
+ "Wrong number of config_param_templates");
+
+const ConfigTemplate config_block_templates[] = {
+ { "audio_output", true },
+ { "decoder", true },
+ { "input", true },
+ { "playlist_plugin", true },
+ { "resampler" },
+ { "filter", true },
+ { "database" },
+ { "neighbors", true },
+};
+
+static constexpr unsigned n_config_block_templates =
+ ARRAY_SIZE(config_block_templates);
+
+static_assert(n_config_block_templates == unsigned(ConfigBlockOption::MAX),
+ "Wrong number of config_block_templates");
+
+gcc_pure
+static inline unsigned
+ParseConfigTemplateName(const ConfigTemplate templates[], unsigned count,
+ const char *name)
+{
+ unsigned i = 0;
+ for (; i < count; ++i)
+ if (strcmp(templates[i].name, name) == 0)
+ break;
+
+ return i;
+}
ConfigOption
ParseConfigOptionName(const char *name)
{
- for (unsigned i = 0; i < n_config_templates; ++i)
- if (strcmp(config_templates[i].name, name) == 0)
- return ConfigOption(i);
+ return ConfigOption(ParseConfigTemplateName(config_param_templates,
+ n_config_param_templates,
+ name));
+}
- return CONF_MAX;
+ConfigBlockOption
+ParseConfigBlockOptionName(const char *name)
+{
+ return ConfigBlockOption(ParseConfigTemplateName(config_block_templates,
+ n_config_block_templates,
+ name));
}