config/Option: convert to strictly-typed enum

This commit is contained in:
Max Kellermann
2015-01-21 22:36:13 +01:00
parent 10972da060
commit 1c3f5517fa
36 changed files with 153 additions and 132 deletions

View File

@@ -175,7 +175,7 @@ ReadConfigFile(ConfigData &config_data, FILE *fp, Error &error)
"repeatable" flag */
const ConfigOption o = ParseConfigOptionName(name);
if (o == CONF_MAX) {
if (o == ConfigOption::MAX) {
error.Format(config_file_domain,
"unrecognized parameter in config file at "
"line %i: %s\n", count, name);

View File

@@ -22,68 +22,78 @@
#include "Compiler.h"
enum ConfigOption {
CONF_MUSIC_DIR,
CONF_PLAYLIST_DIR,
CONF_FOLLOW_INSIDE_SYMLINKS,
CONF_FOLLOW_OUTSIDE_SYMLINKS,
CONF_DB_FILE,
CONF_STICKER_FILE,
CONF_LOG_FILE,
CONF_PID_FILE,
CONF_STATE_FILE,
CONF_STATE_FILE_INTERVAL,
CONF_RESTORE_PAUSED,
CONF_USER,
CONF_GROUP,
CONF_BIND_TO_ADDRESS,
CONF_PORT,
CONF_LOG_LEVEL,
CONF_ZEROCONF_NAME,
CONF_ZEROCONF_ENABLED,
CONF_PASSWORD,
CONF_DEFAULT_PERMS,
CONF_AUDIO_OUTPUT,
CONF_AUDIO_OUTPUT_FORMAT,
CONF_MIXER_TYPE,
CONF_REPLAYGAIN,
CONF_REPLAYGAIN_PREAMP,
CONF_REPLAYGAIN_MISSING_PREAMP,
CONF_REPLAYGAIN_LIMIT,
CONF_VOLUME_NORMALIZATION,
CONF_SAMPLERATE_CONVERTER,
CONF_AUDIO_BUFFER_SIZE,
CONF_BUFFER_BEFORE_PLAY,
CONF_HTTP_PROXY_HOST,
CONF_HTTP_PROXY_PORT,
CONF_HTTP_PROXY_USER,
CONF_HTTP_PROXY_PASSWORD,
CONF_CONN_TIMEOUT,
CONF_MAX_CONN,
CONF_MAX_PLAYLIST_LENGTH,
CONF_MAX_COMMAND_LIST_SIZE,
CONF_MAX_OUTPUT_BUFFER_SIZE,
CONF_FS_CHARSET,
CONF_ID3V1_ENCODING,
CONF_METADATA_TO_USE,
CONF_SAVE_ABSOLUTE_PATHS,
CONF_DECODER,
CONF_INPUT,
CONF_GAPLESS_MP3_PLAYBACK,
CONF_PLAYLIST_PLUGIN,
CONF_AUTO_UPDATE,
CONF_AUTO_UPDATE_DEPTH,
CONF_DESPOTIFY_USER,
CONF_DESPOTIFY_PASSWORD,
CONF_DESPOTIFY_HIGH_BITRATE,
CONF_AUDIO_FILTER,
CONF_DATABASE,
CONF_NEIGHBORS,
CONF_MAX
#if defined(WIN32) && CLANG_OR_GCC_VERSION(4,7)
/* "INPUT" is declared by winuser.h */
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wshadow"
#endif
enum class ConfigOption {
MUSIC_DIR,
PLAYLIST_DIR,
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,
PORT,
LOG_LEVEL,
ZEROCONF_NAME,
ZEROCONF_ENABLED,
PASSWORD,
DEFAULT_PERMS,
AUDIO_OUTPUT,
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,
HTTP_PROXY_PORT,
HTTP_PROXY_USER,
HTTP_PROXY_PASSWORD,
CONN_TIMEOUT,
MAX_CONN,
MAX_PLAYLIST_LENGTH,
MAX_COMMAND_LIST_SIZE,
MAX_OUTPUT_BUFFER_SIZE,
FS_CHARSET,
ID3V1_ENCODING,
METADATA_TO_USE,
SAVE_ABSOLUTE_PATHS,
DECODER,
INPUT,
GAPLESS_MP3_PLAYBACK,
PLAYLIST_PLUGIN,
AUTO_UPDATE,
AUTO_UPDATE_DEPTH,
DESPOTIFY_USER,
DESPOTIFY_PASSWORD,
DESPOTIFY_HIGH_BITRATE,
AUDIO_FILTER,
DATABASE,
NEIGHBORS,
MAX
};
#if defined(WIN32) && CLANG_OR_GCC_VERSION(4,7)
#pragma GCC diagnostic pop
#endif
/**
* @return #CONF_MAX if not found
* @return #ConfigOption::MAX if not found
*/
gcc_pure
enum ConfigOption

View File

@@ -70,7 +70,7 @@ GetHome(Error &error)
static AllocatedPath
GetConfiguredHome(Error &error)
{
const char *user = config_get_string(CONF_USER, nullptr);
const char *user = config_get_string(ConfigOption::USER, nullptr);
return user != nullptr
? GetHome(user, error)
: GetHome(error);

View File

@@ -84,7 +84,7 @@ const ConfigTemplate config_templates[] = {
static constexpr unsigned n_config_templates = ARRAY_SIZE(config_templates);
static_assert(n_config_templates == unsigned(CONF_MAX),
static_assert(n_config_templates == unsigned(ConfigOption::MAX),
"Wrong number of config_templates");
ConfigOption
@@ -94,5 +94,5 @@ ParseConfigOptionName(const char *name)
if (strcmp(config_templates[i].name, name) == 0)
return ConfigOption(i);
return CONF_MAX;
return ConfigOption::MAX;
}

View File

@@ -27,7 +27,7 @@
struct config_param;
struct ConfigData {
std::array<config_param *, std::size_t(CONF_MAX)> params;
std::array<config_param *, std::size_t(ConfigOption::MAX)> params;
void Clear();
};