From ad787b20cad2962cf16a8d943292c84582267832 Mon Sep 17 00:00:00 2001
From: Lioncash <mathew1800@gmail.com>
Date: Mon, 28 Nov 2022 10:41:19 -0500
Subject: [PATCH] nvdrv: Simplify builder declarations

We can just use auto here. If one of these ever happens to not be
derived from nvdevice, then this will cause a compilation error.

We can also move the devices into the collection to get rid of an
unnecessary atomic reference count increment and decrement.
---
 src/core/hle/service/nvdrv/nvdrv.cpp | 44 ++++++++++++----------------
 1 file changed, 18 insertions(+), 26 deletions(-)

diff --git a/src/core/hle/service/nvdrv/nvdrv.cpp b/src/core/hle/service/nvdrv/nvdrv.cpp
index 9f4c7c99a..6fc8565c0 100644
--- a/src/core/hle/service/nvdrv/nvdrv.cpp
+++ b/src/core/hle/service/nvdrv/nvdrv.cpp
@@ -55,48 +55,40 @@ void InstallInterfaces(SM::ServiceManager& service_manager, NVFlinger::NVFlinger
 Module::Module(Core::System& system)
     : container{system.Host1x()}, service_context{system, "nvdrv"}, events_interface{*this} {
     builders["/dev/nvhost-as-gpu"] = [this, &system](DeviceFD fd) {
-        std::shared_ptr<Devices::nvdevice> device =
-            std::make_shared<Devices::nvhost_as_gpu>(system, *this, container);
-        return open_files.emplace(fd, device).first;
+        auto device = std::make_shared<Devices::nvhost_as_gpu>(system, *this, container);
+        return open_files.emplace(fd, std::move(device)).first;
     };
     builders["/dev/nvhost-gpu"] = [this, &system](DeviceFD fd) {
-        std::shared_ptr<Devices::nvdevice> device =
-            std::make_shared<Devices::nvhost_gpu>(system, events_interface, container);
-        return open_files.emplace(fd, device).first;
+        auto device = std::make_shared<Devices::nvhost_gpu>(system, events_interface, container);
+        return open_files.emplace(fd, std::move(device)).first;
     };
     builders["/dev/nvhost-ctrl-gpu"] = [this, &system](DeviceFD fd) {
-        std::shared_ptr<Devices::nvdevice> device =
-            std::make_shared<Devices::nvhost_ctrl_gpu>(system, events_interface);
-        return open_files.emplace(fd, device).first;
+        auto device = std::make_shared<Devices::nvhost_ctrl_gpu>(system, events_interface);
+        return open_files.emplace(fd, std::move(device)).first;
     };
     builders["/dev/nvmap"] = [this, &system](DeviceFD fd) {
-        std::shared_ptr<Devices::nvdevice> device =
-            std::make_shared<Devices::nvmap>(system, container);
-        return open_files.emplace(fd, device).first;
+        auto device = std::make_shared<Devices::nvmap>(system, container);
+        return open_files.emplace(fd, std::move(device)).first;
     };
     builders["/dev/nvdisp_disp0"] = [this, &system](DeviceFD fd) {
-        std::shared_ptr<Devices::nvdevice> device =
-            std::make_shared<Devices::nvdisp_disp0>(system, container);
-        return open_files.emplace(fd, device).first;
+        auto device = std::make_shared<Devices::nvdisp_disp0>(system, container);
+        return open_files.emplace(fd, std::move(device)).first;
     };
     builders["/dev/nvhost-ctrl"] = [this, &system](DeviceFD fd) {
-        std::shared_ptr<Devices::nvdevice> device =
-            std::make_shared<Devices::nvhost_ctrl>(system, events_interface, container);
-        return open_files.emplace(fd, device).first;
+        auto device = std::make_shared<Devices::nvhost_ctrl>(system, events_interface, container);
+        return open_files.emplace(fd, std::move(device)).first;
     };
     builders["/dev/nvhost-nvdec"] = [this, &system](DeviceFD fd) {
-        std::shared_ptr<Devices::nvdevice> device =
-            std::make_shared<Devices::nvhost_nvdec>(system, container);
-        return open_files.emplace(fd, device).first;
+        auto device = std::make_shared<Devices::nvhost_nvdec>(system, container);
+        return open_files.emplace(fd, std::move(device)).first;
     };
     builders["/dev/nvhost-nvjpg"] = [this, &system](DeviceFD fd) {
-        std::shared_ptr<Devices::nvdevice> device = std::make_shared<Devices::nvhost_nvjpg>(system);
-        return open_files.emplace(fd, device).first;
+        auto device = std::make_shared<Devices::nvhost_nvjpg>(system);
+        return open_files.emplace(fd, std::move(device)).first;
     };
     builders["/dev/nvhost-vic"] = [this, &system](DeviceFD fd) {
-        std::shared_ptr<Devices::nvdevice> device =
-            std::make_shared<Devices::nvhost_vic>(system, container);
-        return open_files.emplace(fd, device).first;
+        auto device = std::make_shared<Devices::nvhost_vic>(system, container);
+        return open_files.emplace(fd, std::move(device)).first;
     };
 }