From 50b58da56c16d46238f16a74d2781eccf060d08e Mon Sep 17 00:00:00 2001
From: Lioncash <mathew1800@gmail.com>
Date: Wed, 1 Aug 2018 23:50:45 -0400
Subject: [PATCH 1/2] sink_details: std::move std::function instances

Given std::function is allowed to potentially allocate, these should be
std::move'd to prevent potential reallocation (should that ever happen).
---
 src/audio_core/sink_details.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/audio_core/sink_details.h b/src/audio_core/sink_details.h
index 17ecd1e93..4e49f7f05 100644
--- a/src/audio_core/sink_details.h
+++ b/src/audio_core/sink_details.h
@@ -6,6 +6,7 @@
 
 #include <functional>
 #include <memory>
+#include <utility>
 #include <vector>
 
 namespace AudioCore {
@@ -15,7 +16,7 @@ class Sink;
 struct SinkDetails {
     SinkDetails(const char* id_, std::function<std::unique_ptr<Sink>(std::string)> factory_,
                 std::function<std::vector<std::string>()> list_devices_)
-        : id(id_), factory(factory_), list_devices(list_devices_) {}
+        : id(id_), factory(std::move(factory_)), list_devices(std::move(list_devices_)) {}
 
     /// Name for this sink.
     const char* id;

From 29e5dec98675c6473b365a71bd8ac29388941702 Mon Sep 17 00:00:00 2001
From: Lioncash <mathew1800@gmail.com>
Date: Wed, 1 Aug 2018 23:55:59 -0400
Subject: [PATCH 2/2] sink_details: Deduplicate long std::function repetition

We can just use type aliases to avoid needing to write the same long
type twice
---
 src/audio_core/sink_details.h | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/audio_core/sink_details.h b/src/audio_core/sink_details.h
index 4e49f7f05..e7b3a4b01 100644
--- a/src/audio_core/sink_details.h
+++ b/src/audio_core/sink_details.h
@@ -14,16 +14,18 @@ namespace AudioCore {
 class Sink;
 
 struct SinkDetails {
-    SinkDetails(const char* id_, std::function<std::unique_ptr<Sink>(std::string)> factory_,
-                std::function<std::vector<std::string>()> list_devices_)
+    using FactoryFn = std::function<std::unique_ptr<Sink>(std::string)>;
+    using ListDevicesFn = std::function<std::vector<std::string>()>;
+
+    SinkDetails(const char* id_, FactoryFn factory_, ListDevicesFn list_devices_)
         : id(id_), factory(std::move(factory_)), list_devices(std::move(list_devices_)) {}
 
     /// Name for this sink.
     const char* id;
     /// A method to call to construct an instance of this type of sink.
-    std::function<std::unique_ptr<Sink>(std::string device_id)> factory;
+    FactoryFn factory;
     /// A method to call to list available devices.
-    std::function<std::vector<std::string>()> list_devices;
+    ListDevicesFn list_devices;
 };
 
 extern const std::vector<SinkDetails> g_sink_details;