forked from ShuriZma/suyu
1
0
Fork 0

Merge pull request #2356 from lioncash/pair

kernel/{server_port, server_session}: Return pairs instead of tuples from pair creation functions
This commit is contained in:
bunnei 2019-04-07 17:48:00 -04:00 committed by GitHub
commit 52ad5fa0e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 15 additions and 18 deletions

View File

@ -139,10 +139,8 @@ public:
context->AddDomainObject(std::move(iface)); context->AddDomainObject(std::move(iface));
} else { } else {
auto& kernel = Core::System::GetInstance().Kernel(); auto& kernel = Core::System::GetInstance().Kernel();
auto sessions = auto [server, client] =
Kernel::ServerSession::CreateSessionPair(kernel, iface->GetServiceName()); Kernel::ServerSession::CreateSessionPair(kernel, iface->GetServiceName());
auto server = std::get<Kernel::SharedPtr<Kernel::ServerSession>>(sessions);
auto client = std::get<Kernel::SharedPtr<Kernel::ClientSession>>(sessions);
iface->ClientConnected(server); iface->ClientConnected(server);
context->AddMoveObject(std::move(client)); context->AddMoveObject(std::move(client));
} }

View File

@ -2,8 +2,6 @@
// Licensed under GPLv2 or any later version // Licensed under GPLv2 or any later version
// Refer to the license.txt file included. // Refer to the license.txt file included.
#include <tuple>
#include "core/hle/kernel/client_port.h" #include "core/hle/kernel/client_port.h"
#include "core/hle/kernel/client_session.h" #include "core/hle/kernel/client_session.h"
#include "core/hle/kernel/errors.h" #include "core/hle/kernel/errors.h"
@ -31,18 +29,18 @@ ResultVal<SharedPtr<ClientSession>> ClientPort::Connect() {
active_sessions++; active_sessions++;
// Create a new session pair, let the created sessions inherit the parent port's HLE handler. // Create a new session pair, let the created sessions inherit the parent port's HLE handler.
auto sessions = ServerSession::CreateSessionPair(kernel, server_port->GetName(), this); auto [server, client] = ServerSession::CreateSessionPair(kernel, server_port->GetName(), this);
if (server_port->HasHLEHandler()) { if (server_port->HasHLEHandler()) {
server_port->GetHLEHandler()->ClientConnected(std::get<SharedPtr<ServerSession>>(sessions)); server_port->GetHLEHandler()->ClientConnected(server);
} else { } else {
server_port->AppendPendingSession(std::get<SharedPtr<ServerSession>>(sessions)); server_port->AppendPendingSession(server);
} }
// Wake the threads waiting on the ServerPort // Wake the threads waiting on the ServerPort
server_port->WakeupAllWaitingThreads(); server_port->WakeupAllWaitingThreads();
return MakeResult(std::get<SharedPtr<ClientSession>>(sessions)); return MakeResult(client);
} }
void ClientPort::ConnectionClosed() { void ClientPort::ConnectionClosed() {

View File

@ -39,9 +39,8 @@ void ServerPort::Acquire(Thread* thread) {
ASSERT_MSG(!ShouldWait(thread), "object unavailable!"); ASSERT_MSG(!ShouldWait(thread), "object unavailable!");
} }
std::tuple<SharedPtr<ServerPort>, SharedPtr<ClientPort>> ServerPort::CreatePortPair( ServerPort::PortPair ServerPort::CreatePortPair(KernelCore& kernel, u32 max_sessions,
KernelCore& kernel, u32 max_sessions, std::string name) { std::string name) {
SharedPtr<ServerPort> server_port(new ServerPort(kernel)); SharedPtr<ServerPort> server_port(new ServerPort(kernel));
SharedPtr<ClientPort> client_port(new ClientPort(kernel)); SharedPtr<ClientPort> client_port(new ClientPort(kernel));
@ -51,7 +50,7 @@ std::tuple<SharedPtr<ServerPort>, SharedPtr<ClientPort>> ServerPort::CreatePortP
client_port->max_sessions = max_sessions; client_port->max_sessions = max_sessions;
client_port->active_sessions = 0; client_port->active_sessions = 0;
return std::make_tuple(std::move(server_port), std::move(client_port)); return std::make_pair(std::move(server_port), std::move(client_port));
} }
} // namespace Kernel } // namespace Kernel

View File

@ -6,7 +6,7 @@
#include <memory> #include <memory>
#include <string> #include <string>
#include <tuple> #include <utility>
#include <vector> #include <vector>
#include "common/common_types.h" #include "common/common_types.h"
#include "core/hle/kernel/object.h" #include "core/hle/kernel/object.h"
@ -23,6 +23,7 @@ class SessionRequestHandler;
class ServerPort final : public WaitObject { class ServerPort final : public WaitObject {
public: public:
using HLEHandler = std::shared_ptr<SessionRequestHandler>; using HLEHandler = std::shared_ptr<SessionRequestHandler>;
using PortPair = std::pair<SharedPtr<ServerPort>, SharedPtr<ClientPort>>;
/** /**
* Creates a pair of ServerPort and an associated ClientPort. * Creates a pair of ServerPort and an associated ClientPort.
@ -32,8 +33,8 @@ public:
* @param name Optional name of the ports * @param name Optional name of the ports
* @return The created port tuple * @return The created port tuple
*/ */
static std::tuple<SharedPtr<ServerPort>, SharedPtr<ClientPort>> CreatePortPair( static PortPair CreatePortPair(KernelCore& kernel, u32 max_sessions,
KernelCore& kernel, u32 max_sessions, std::string name = "UnknownPort"); std::string name = "UnknownPort");
std::string GetTypeName() const override { std::string GetTypeName() const override {
return "ServerPort"; return "ServerPort";

View File

@ -204,6 +204,6 @@ ServerSession::SessionPair ServerSession::CreateSessionPair(KernelCore& kernel,
client_session->parent = parent; client_session->parent = parent;
server_session->parent = parent; server_session->parent = parent;
return std::make_tuple(std::move(server_session), std::move(client_session)); return std::make_pair(std::move(server_session), std::move(client_session));
} }
} // namespace Kernel } // namespace Kernel

View File

@ -6,6 +6,7 @@
#include <memory> #include <memory>
#include <string> #include <string>
#include <utility>
#include <vector> #include <vector>
#include "core/hle/kernel/object.h" #include "core/hle/kernel/object.h"
@ -58,7 +59,7 @@ public:
return parent.get(); return parent.get();
} }
using SessionPair = std::tuple<SharedPtr<ServerSession>, SharedPtr<ClientSession>>; using SessionPair = std::pair<SharedPtr<ServerSession>, SharedPtr<ClientSession>>;
/** /**
* Creates a pair of ServerSession and an associated ClientSession. * Creates a pair of ServerSession and an associated ClientSession.