From a22dcaaa786de67786eeaeb47598ed76339249ad Mon Sep 17 00:00:00 2001
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Date: Tue, 22 Jan 2019 15:31:22 +0200
Subject: cam: options: Don't implement move semantics for
 OptionsParser::Options
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The compiler creates a move constructor automatically when none is
supplied, and it does the right thing by default in this case. Using
std::move() inside the function prevents the compiler from doing
return value optimization and actually hinders performances. Using
std::move() in the caller is unnecessary, the move constructor is used
automatically by the compiler.

For all these reasons remove the tentative optimization that resulted in
worse performances and worse code.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
---
 src/cam/main.cpp    |  2 +-
 src/cam/options.cpp | 13 +------------
 src/cam/options.h   |  2 --
 3 files changed, 2 insertions(+), 15 deletions(-)

(limited to 'src/cam')

diff --git a/src/cam/main.cpp b/src/cam/main.cpp
index 22211670..0d37039f 100644
--- a/src/cam/main.cpp
+++ b/src/cam/main.cpp
@@ -33,7 +33,7 @@ static int parseOptions(int argc, char *argv[])
 	parser.addOption(OptHelp, "Display this help message", "help");
 	parser.addOption(OptList, "List all cameras", "list");
 
-	options = std::move(parser.parse(argc, argv));
+	options = parser.parse(argc, argv);
 	if (!options.valid())
 		return -EINVAL;
 
diff --git a/src/cam/options.cpp b/src/cam/options.cpp
index d391a0e5..82acff9b 100644
--- a/src/cam/options.cpp
+++ b/src/cam/options.cpp
@@ -102,7 +102,7 @@ OptionsParser::Options OptionsParser::parse(int argc, char **argv)
 		options.values_[c] = optarg ? optarg : "";
 	}
 
-	return std::move(options);
+	return options;
 }
 
 void OptionsParser::usage()
@@ -160,17 +160,6 @@ OptionsParser::Options::Options()
 {
 }
 
-OptionsParser::Options::Options(Options &&other)
-	: values_(std::move(other.values_))
-{
-}
-
-OptionsParser::Options &OptionsParser::Options::operator=(Options &&other)
-{
-	values_ = other.values_;
-	return *this;
-}
-
 bool OptionsParser::Options::valid() const
 {
 	return !values_.empty();
diff --git a/src/cam/options.h b/src/cam/options.h
index 88336dfe..f99ea730 100644
--- a/src/cam/options.h
+++ b/src/cam/options.h
@@ -23,8 +23,6 @@ public:
 	class Options {
 	public:
 		Options();
-		Options(Options &&other);
-		Options &operator=(Options &&other);
 
 		bool valid() const;
 		bool isSet(int opt) const;
-- 
cgit v1.2.1