mirror of
https://github.com/Atmosphere-NX/Atmosphere
synced 2025-02-15 04:51:12 +00:00
![Tony Wasserka](/assets/img/avatar_default.png)
* Stratosphere: Use modern C++ idioms in some places * algorithms like std::for_each are used instead of raw loops * Stratosphere: Replace more raw loops with algorithms * Stratosphere: Add a utility predicate function to test for equality with a reference element This can be used to rewrite some common raw loops using algorithms instead * fs.mitm: Use variant * fs.mitm: Use enum class * fs.mitm: Turn RomFSSourceInfo::Cleanup into a destructor This obsoletes the need for a custom deleter in other places * fs.mitm: Use enum class some more * fs.mitm: Use unique_ptr * fs.mitm: Simplify initialization * Stratosphere: Simplify initialization * fs.mitm: Use unique_ptr (fix memory leak along the way) The previous code was using "delete" rather than "delete[]" * fs.mitm: Use vector::emplace_back rather than push_back emplace_back constructs elements in-place, hence avoiding a redundant element copy. * Stratosphere: Replace more raw loops with algorithms * Stratosphere: Use unique_ptr * fs.mitm: Replace more raw loops with algorithms * Stratosphere: Prefer move-construction over copy-construction when moving sink parameters around
31 lines
1 KiB
C++
31 lines
1 KiB
C++
#pragma once
|
|
#include <switch.h>
|
|
#include <type_traits>
|
|
|
|
#include "ipc_templating.hpp"
|
|
#include "iserviceobject.hpp"
|
|
#include "iwaitable.hpp"
|
|
#include "isession.hpp"
|
|
|
|
template <typename T>
|
|
class IPCSession final : public ISession<T> {
|
|
static_assert(std::is_base_of<IServiceObject, T>::value, "Service Objects must derive from IServiceObject");
|
|
|
|
public:
|
|
IPCSession<T>(size_t pbs = 0x400) : ISession<T>(NULL, 0, 0, 0) {
|
|
Result rc;
|
|
if (R_FAILED((rc = svcCreateSession(&this->server_handle, &this->client_handle, 0, 0)))) {
|
|
fatalSimple(rc);
|
|
}
|
|
this->service_object = std::make_shared<T>();
|
|
this->pointer_buffer.resize(pbs);
|
|
}
|
|
|
|
IPCSession<T>(std::shared_ptr<T> so, size_t pbs = 0x400) : ISession<T>(NULL, 0, 0, so, 0) {
|
|
Result rc;
|
|
if (R_FAILED((rc = svcCreateSession(&this->server_handle, &this->client_handle, 0, 0)))) {
|
|
fatalSimple(rc);
|
|
}
|
|
this->pointer_buffer.resize(pbs);
|
|
}
|
|
};
|