Browse Source
Merge pull request #4501 from lioncash/is_base_of
common/concepts: Rename IsBaseOf to DerivedFrom
pull/15/merge
David
5 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with
8 additions and
6 deletions
-
src/common/concepts.h
-
src/core/hle/service/sm/sm.h
-
src/core/loader/loader.cpp
|
|
|
@ -23,10 +23,12 @@ concept IsSTLContainer = requires(T t) { |
|
|
|
t.size(); |
|
|
|
}; |
|
|
|
|
|
|
|
// Check if type T is derived from T2 |
|
|
|
template <typename T, typename T2> |
|
|
|
concept IsBaseOf = requires { |
|
|
|
std::is_base_of_v<T, T2>; |
|
|
|
// TODO: Replace with std::derived_from when the <concepts> header |
|
|
|
// is available on all supported platforms. |
|
|
|
template <typename Derived, typename Base> |
|
|
|
concept DerivedFrom = requires { |
|
|
|
std::is_base_of_v<Base, Derived>; |
|
|
|
std::is_convertible_v<const volatile Derived*, const volatile Base*>; |
|
|
|
}; |
|
|
|
|
|
|
|
} // namespace Common |
|
|
|
@ -57,7 +57,7 @@ public: |
|
|
|
ResultVal<std::shared_ptr<Kernel::ClientPort>> GetServicePort(const std::string& name); |
|
|
|
ResultVal<std::shared_ptr<Kernel::ClientSession>> ConnectToService(const std::string& name); |
|
|
|
|
|
|
|
template <Common::IsBaseOf<Kernel::SessionRequestHandler> T> |
|
|
|
template <Common::DerivedFrom<Kernel::SessionRequestHandler> T> |
|
|
|
std::shared_ptr<T> GetService(const std::string& service_name) const { |
|
|
|
auto service = registered_services.find(service_name); |
|
|
|
if (service == registered_services.end()) { |
|
|
|
|
|
|
|
@ -25,7 +25,7 @@ namespace Loader { |
|
|
|
|
|
|
|
namespace { |
|
|
|
|
|
|
|
template <Common::IsBaseOf<AppLoader> T> |
|
|
|
template <Common::DerivedFrom<AppLoader> T> |
|
|
|
std::optional<FileType> IdentifyFileLoader(FileSys::VirtualFile file) { |
|
|
|
const auto file_type = T::IdentifyType(file); |
|
|
|
if (file_type != FileType::Error) { |
|
|
|
|