From ca0d09c50fc4246fdae67b8a33799ea580b68593 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Sun, 4 Aug 2013 12:24:36 +0200
Subject: [PATCH] EncoderPlugin: pass config_param reference

---
 src/EncoderPlugin.hxx                |  4 ++--
 src/encoder/FlacEncoderPlugin.cxx    |  9 ++++-----
 src/encoder/LameEncoderPlugin.cxx    | 20 ++++++++++----------
 src/encoder/NullEncoderPlugin.cxx    |  2 +-
 src/encoder/OpusEncoderPlugin.cxx    | 11 +++++------
 src/encoder/TwolameEncoderPlugin.cxx | 20 ++++++++++----------
 src/encoder/VorbisEncoderPlugin.cxx  | 18 +++++++++---------
 src/encoder/WaveEncoderPlugin.cxx    |  2 +-
 src/output/HttpdOutputPlugin.cxx     |  2 +-
 src/output/RecorderOutputPlugin.cxx  |  2 +-
 src/output/ShoutOutputPlugin.cxx     |  2 +-
 test/run_encoder.cxx                 |  2 +-
 test/test_vorbis_encoder.cxx         |  2 +-
 13 files changed, 47 insertions(+), 49 deletions(-)

diff --git a/src/EncoderPlugin.hxx b/src/EncoderPlugin.hxx
index 70bdabe1a..6bb2e1583 100644
--- a/src/EncoderPlugin.hxx
+++ b/src/EncoderPlugin.hxx
@@ -49,7 +49,7 @@ struct Encoder {
 struct EncoderPlugin {
 	const char *name;
 
-	Encoder *(*init)(const struct config_param *param,
+	Encoder *(*init)(const config_param &param,
 			 GError **error);
 
 	void (*finish)(Encoder *encoder);
@@ -87,7 +87,7 @@ struct EncoderPlugin {
  * @return an encoder object on success, NULL on failure
  */
 static inline Encoder *
-encoder_init(const EncoderPlugin &plugin, const config_param *param,
+encoder_init(const EncoderPlugin &plugin, const config_param &param,
 	     GError **error_r)
 {
 	return plugin.init(param, error_r);
diff --git a/src/encoder/FlacEncoderPlugin.cxx b/src/encoder/FlacEncoderPlugin.cxx
index 5e7e7f526..a14b97f11 100644
--- a/src/encoder/FlacEncoderPlugin.cxx
+++ b/src/encoder/FlacEncoderPlugin.cxx
@@ -63,17 +63,16 @@ flac_encoder_quark(void)
 }
 
 static bool
-flac_encoder_configure(struct flac_encoder *encoder,
-		const struct config_param *param, G_GNUC_UNUSED GError **error)
+flac_encoder_configure(struct flac_encoder *encoder, const config_param &param,
+		       gcc_unused GError **error)
 {
-	encoder->compression = config_get_block_unsigned(param,
-						"compression", 5);
+	encoder->compression = param.GetBlockValue("compression", 5u);
 
 	return true;
 }
 
 static Encoder *
-flac_encoder_init(const struct config_param *param, GError **error)
+flac_encoder_init(const config_param &param, GError **error)
 {
 	flac_encoder *encoder = new flac_encoder();
 
diff --git a/src/encoder/LameEncoderPlugin.cxx b/src/encoder/LameEncoderPlugin.cxx
index ea0b91380..db93b93a3 100644
--- a/src/encoder/LameEncoderPlugin.cxx
+++ b/src/encoder/LameEncoderPlugin.cxx
@@ -43,7 +43,7 @@ struct LameEncoder final {
 
 	LameEncoder():encoder(lame_encoder_plugin) {}
 
-	bool Configure(const config_param *param, GError **error);
+	bool Configure(const config_param &param, GError **error);
 };
 
 static inline GQuark
@@ -53,12 +53,12 @@ lame_encoder_quark(void)
 }
 
 bool
-LameEncoder::Configure(const config_param *param, GError **error)
+LameEncoder::Configure(const config_param &param, GError **error)
 {
 	const char *value;
 	char *endptr;
 
-	value = config_get_block_string(param, "quality", nullptr);
+	value = param.GetBlockValue("quality");
 	if (value != nullptr) {
 		/* a quality was configured (VBR) */
 
@@ -68,26 +68,26 @@ LameEncoder::Configure(const config_param *param, GError **error)
 			g_set_error(error, lame_encoder_quark(), 0,
 				    "quality \"%s\" is not a number in the "
 				    "range -1 to 10, line %i",
-				    value, param->line);
+				    value, param.line);
 			return false;
 		}
 
-		if (config_get_block_string(param, "bitrate", nullptr) != nullptr) {
+		if (param.GetBlockValue("bitrate") != nullptr) {
 			g_set_error(error, lame_encoder_quark(), 0,
 				    "quality and bitrate are "
 				    "both defined (line %i)",
-				    param->line);
+				    param.line);
 			return false;
 		}
 	} else {
 		/* a bit rate was configured */
 
-		value = config_get_block_string(param, "bitrate", nullptr);
+		value = param.GetBlockValue("bitrate");
 		if (value == nullptr) {
 			g_set_error(error, lame_encoder_quark(), 0,
 				    "neither bitrate nor quality defined "
 				    "at line %i",
-				    param->line);
+				    param.line);
 			return false;
 		}
 
@@ -97,7 +97,7 @@ LameEncoder::Configure(const config_param *param, GError **error)
 		if (*endptr != '\0' || bitrate <= 0) {
 			g_set_error(error, lame_encoder_quark(), 0,
 				    "bitrate at line %i should be a positive integer",
-				    param->line);
+				    param.line);
 			return false;
 		}
 	}
@@ -106,7 +106,7 @@ LameEncoder::Configure(const config_param *param, GError **error)
 }
 
 static Encoder *
-lame_encoder_init(const struct config_param *param, GError **error_r)
+lame_encoder_init(const config_param &param, GError **error_r)
 {
 	LameEncoder *encoder = new LameEncoder();
 
diff --git a/src/encoder/NullEncoderPlugin.cxx b/src/encoder/NullEncoderPlugin.cxx
index 206d55c2f..5c01fbd98 100644
--- a/src/encoder/NullEncoderPlugin.cxx
+++ b/src/encoder/NullEncoderPlugin.cxx
@@ -40,7 +40,7 @@ struct NullEncoder final {
 };
 
 static Encoder *
-null_encoder_init(gcc_unused const struct config_param *param,
+null_encoder_init(gcc_unused const config_param &param,
 		  gcc_unused GError **error)
 {
 	NullEncoder *encoder = new NullEncoder();
diff --git a/src/encoder/OpusEncoderPlugin.cxx b/src/encoder/OpusEncoderPlugin.cxx
index a6f36f7d5..d67cf1862 100644
--- a/src/encoder/OpusEncoderPlugin.cxx
+++ b/src/encoder/OpusEncoderPlugin.cxx
@@ -75,9 +75,9 @@ opus_encoder_quark(void)
 
 static bool
 opus_encoder_configure(struct opus_encoder *encoder,
-		       const struct config_param *param, GError **error_r)
+		       const config_param &param, GError **error_r)
 {
-	const char *value = config_get_block_string(param, "bitrate", "auto");
+	const char *value = param.GetBlockValue("bitrate", "auto");
 	if (strcmp(value, "auto") == 0)
 		encoder->bitrate = OPUS_AUTO;
 	else if (strcmp(value, "max") == 0)
@@ -93,15 +93,14 @@ opus_encoder_configure(struct opus_encoder *encoder,
 		}
 	}
 
-	encoder->complexity = config_get_block_unsigned(param, "complexity",
-							10);
+	encoder->complexity = param.GetBlockValue("complexity", 10u);
 	if (encoder->complexity > 10) {
 		g_set_error(error_r, opus_encoder_quark(), 0,
 			    "Invalid complexity");
 		return false;
 	}
 
-	value = config_get_block_string(param, "signal", "auto");
+	value = param.GetBlockValue("signal", "auto");
 	if (strcmp(value, "auto") == 0)
 		encoder->signal = OPUS_AUTO;
 	else if (strcmp(value, "voice") == 0)
@@ -118,7 +117,7 @@ opus_encoder_configure(struct opus_encoder *encoder,
 }
 
 static Encoder *
-opus_encoder_init(const struct config_param *param, GError **error)
+opus_encoder_init(const config_param &param, GError **error)
 {
 	opus_encoder *encoder = new opus_encoder();
 
diff --git a/src/encoder/TwolameEncoderPlugin.cxx b/src/encoder/TwolameEncoderPlugin.cxx
index 4e2d47b63..cd85e43b6 100644
--- a/src/encoder/TwolameEncoderPlugin.cxx
+++ b/src/encoder/TwolameEncoderPlugin.cxx
@@ -48,7 +48,7 @@ struct TwolameEncoder final {
 
 	TwolameEncoder():encoder(twolame_encoder_plugin) {}
 
-	bool Configure(const config_param *param, GError **error);
+	bool Configure(const config_param &param, GError **error);
 };
 
 static inline GQuark
@@ -58,12 +58,12 @@ twolame_encoder_quark(void)
 }
 
 bool
-TwolameEncoder::Configure(const config_param *param, GError **error)
+TwolameEncoder::Configure(const config_param &param, GError **error)
 {
 	const char *value;
 	char *endptr;
 
-	value = config_get_block_string(param, "quality", nullptr);
+	value = param.GetBlockValue("quality");
 	if (value != nullptr) {
 		/* a quality was configured (VBR) */
 
@@ -73,26 +73,26 @@ TwolameEncoder::Configure(const config_param *param, GError **error)
 			g_set_error(error, twolame_encoder_quark(), 0,
 				    "quality \"%s\" is not a number in the "
 				    "range -1 to 10, line %i",
-				    value, param->line);
+				    value, param.line);
 			return false;
 		}
 
-		if (config_get_block_string(param, "bitrate", nullptr) != nullptr) {
+		if (param.GetBlockValue("bitrate") != nullptr) {
 			g_set_error(error, twolame_encoder_quark(), 0,
 				    "quality and bitrate are "
 				    "both defined (line %i)",
-				    param->line);
+				    param.line);
 			return false;
 		}
 	} else {
 		/* a bit rate was configured */
 
-		value = config_get_block_string(param, "bitrate", nullptr);
+		value = param.GetBlockValue("bitrate");
 		if (value == nullptr) {
 			g_set_error(error, twolame_encoder_quark(), 0,
 				    "neither bitrate nor quality defined "
 				    "at line %i",
-				    param->line);
+				    param.line);
 			return false;
 		}
 
@@ -102,7 +102,7 @@ TwolameEncoder::Configure(const config_param *param, GError **error)
 		if (*endptr != '\0' || bitrate <= 0) {
 			g_set_error(error, twolame_encoder_quark(), 0,
 				    "bitrate at line %i should be a positive integer",
-				    param->line);
+				    param.line);
 			return false;
 		}
 	}
@@ -111,7 +111,7 @@ TwolameEncoder::Configure(const config_param *param, GError **error)
 }
 
 static Encoder *
-twolame_encoder_init(const struct config_param *param, GError **error_r)
+twolame_encoder_init(const config_param &param, GError **error_r)
 {
 	g_debug("libtwolame version %s", get_twolame_version());
 
diff --git a/src/encoder/VorbisEncoderPlugin.cxx b/src/encoder/VorbisEncoderPlugin.cxx
index bc43ffa43..9d0ba9461 100644
--- a/src/encoder/VorbisEncoderPlugin.cxx
+++ b/src/encoder/VorbisEncoderPlugin.cxx
@@ -62,9 +62,9 @@ vorbis_encoder_quark(void)
 
 static bool
 vorbis_encoder_configure(struct vorbis_encoder *encoder,
-			 const struct config_param *param, GError **error)
+			 const config_param &param, GError **error)
 {
-	const char *value = config_get_block_string(param, "quality", nullptr);
+	const char *value = param.GetBlockValue("quality");
 	if (value != nullptr) {
 		/* a quality was configured (VBR) */
 
@@ -76,26 +76,26 @@ vorbis_encoder_configure(struct vorbis_encoder *encoder,
 			g_set_error(error, vorbis_encoder_quark(), 0,
 				    "quality \"%s\" is not a number in the "
 				    "range -1 to 10, line %i",
-				    value, param->line);
+				    value, param.line);
 			return false;
 		}
 
-		if (config_get_block_string(param, "bitrate", nullptr) != nullptr) {
+		if (param.GetBlockValue("bitrate") != nullptr) {
 			g_set_error(error, vorbis_encoder_quark(), 0,
 				    "quality and bitrate are "
 				    "both defined (line %i)",
-				    param->line);
+				    param.line);
 			return false;
 		}
 	} else {
 		/* a bit rate was configured */
 
-		value = config_get_block_string(param, "bitrate", nullptr);
+		value = param.GetBlockValue("bitrate");
 		if (value == nullptr) {
 			g_set_error(error, vorbis_encoder_quark(), 0,
 				    "neither bitrate nor quality defined "
 				    "at line %i",
-				    param->line);
+				    param.line);
 			return false;
 		}
 
@@ -106,7 +106,7 @@ vorbis_encoder_configure(struct vorbis_encoder *encoder,
 		if (*endptr != '\0' || encoder->bitrate <= 0) {
 			g_set_error(error, vorbis_encoder_quark(), 0,
 				    "bitrate at line %i should be a positive integer",
-				    param->line);
+				    param.line);
 			return false;
 		}
 	}
@@ -115,7 +115,7 @@ vorbis_encoder_configure(struct vorbis_encoder *encoder,
 }
 
 static Encoder *
-vorbis_encoder_init(const struct config_param *param, GError **error)
+vorbis_encoder_init(const config_param &param, GError **error)
 {
 	vorbis_encoder *encoder = new vorbis_encoder();
 
diff --git a/src/encoder/WaveEncoderPlugin.cxx b/src/encoder/WaveEncoderPlugin.cxx
index cc94247cb..17560dfea 100644
--- a/src/encoder/WaveEncoderPlugin.cxx
+++ b/src/encoder/WaveEncoderPlugin.cxx
@@ -83,7 +83,7 @@ fill_wave_header(struct wave_header *header, int channels, int bits,
 }
 
 static Encoder *
-wave_encoder_init(gcc_unused const struct config_param *param,
+wave_encoder_init(gcc_unused const config_param &param,
 		  gcc_unused GError **error)
 {
 	WaveEncoder *encoder = new WaveEncoder();
diff --git a/src/output/HttpdOutputPlugin.cxx b/src/output/HttpdOutputPlugin.cxx
index 21774bac9..4169aabfa 100644
--- a/src/output/HttpdOutputPlugin.cxx
+++ b/src/output/HttpdOutputPlugin.cxx
@@ -123,7 +123,7 @@ HttpdOutput::Configure(const config_param &param, GError **error_r)
 
 	/* initialize encoder */
 
-	encoder = encoder_init(*encoder_plugin, &param, error_r);
+	encoder = encoder_init(*encoder_plugin, param, error_r);
 	if (encoder == nullptr)
 		return false;
 
diff --git a/src/output/RecorderOutputPlugin.cxx b/src/output/RecorderOutputPlugin.cxx
index 8da6d88f2..afae17e84 100644
--- a/src/output/RecorderOutputPlugin.cxx
+++ b/src/output/RecorderOutputPlugin.cxx
@@ -108,7 +108,7 @@ RecorderOutput::Configure(const config_param &param, GError **error_r)
 
 	/* initialize encoder */
 
-	encoder = encoder_init(*encoder_plugin, &param, error_r);
+	encoder = encoder_init(*encoder_plugin, param, error_r);
 	if (encoder == nullptr)
 		return false;
 
diff --git a/src/output/ShoutOutputPlugin.cxx b/src/output/ShoutOutputPlugin.cxx
index 1f307eafc..2d2c0afd0 100644
--- a/src/output/ShoutOutputPlugin.cxx
+++ b/src/output/ShoutOutputPlugin.cxx
@@ -185,7 +185,7 @@ ShoutOutput::Configure(const config_param &param, GError **error_r)
 		return false;
 	}
 
-	encoder = encoder_init(*encoder_plugin, &param, error_r);
+	encoder = encoder_init(*encoder_plugin, param, error_r);
 	if (encoder == nullptr)
 		return false;
 
diff --git a/test/run_encoder.cxx b/test/run_encoder.cxx
index 4b1521b99..27ffddedd 100644
--- a/test/run_encoder.cxx
+++ b/test/run_encoder.cxx
@@ -71,7 +71,7 @@ int main(int argc, char **argv)
 	config_param param;
 	param.AddBlockParam("quality", "5.0", -1);
 
-	const auto encoder = encoder_init(*plugin, &param, &error);
+	const auto encoder = encoder_init(*plugin, param, &error);
 	if (encoder == NULL) {
 		g_printerr("Failed to initialize encoder: %s\n",
 			   error->message);
diff --git a/test/test_vorbis_encoder.cxx b/test/test_vorbis_encoder.cxx
index a523f9d72..75e1462dc 100644
--- a/test/test_vorbis_encoder.cxx
+++ b/test/test_vorbis_encoder.cxx
@@ -56,7 +56,7 @@ main(G_GNUC_UNUSED int argc, G_GNUC_UNUSED char **argv)
 	config_param param;
 	param.AddBlockParam("quality", "5.0", -1);
 
-	const auto encoder = encoder_init(*plugin, &param, NULL);
+	const auto encoder = encoder_init(*plugin, param, NULL);
 	assert(encoder != NULL);
 
 	/* open the encoder */