mirror of
https://github.com/Lime3DS/Lime3DS.git
synced 2025-12-16 12:08:49 +00:00
core: Temporary workaround for MSVC compiler bug (#1505)
This commit is contained in:
parent
9996a07e87
commit
b0fe4d190d
@ -178,7 +178,7 @@ void ServiceFrameworkBase::ReportUnimplementedFunction(u32* cmd_buf, const Funct
|
|||||||
void ServiceFrameworkBase::HandleSyncRequest(Kernel::HLERequestContext& context) {
|
void ServiceFrameworkBase::HandleSyncRequest(Kernel::HLERequestContext& context) {
|
||||||
auto itr = handlers.find(context.CommandHeader().command_id.Value());
|
auto itr = handlers.find(context.CommandHeader().command_id.Value());
|
||||||
const FunctionInfoBase* info = itr == handlers.end() ? nullptr : &itr->second;
|
const FunctionInfoBase* info = itr == handlers.end() ? nullptr : &itr->second;
|
||||||
if (info == nullptr || info->handler_callback == nullptr) {
|
if (info == nullptr || !info->implemented) {
|
||||||
context.ReportUnimplemented();
|
context.ReportUnimplemented();
|
||||||
return ReportUnimplementedFunction(context.CommandBuffer(), info);
|
return ReportUnimplementedFunction(context.CommandBuffer(), info);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -82,6 +82,7 @@ private:
|
|||||||
|
|
||||||
struct FunctionInfoBase {
|
struct FunctionInfoBase {
|
||||||
u32 command_id;
|
u32 command_id;
|
||||||
|
bool implemented;
|
||||||
HandlerFnP<ServiceFrameworkBase> handler_callback;
|
HandlerFnP<ServiceFrameworkBase> handler_callback;
|
||||||
const char* name;
|
const char* name;
|
||||||
};
|
};
|
||||||
@ -96,6 +97,8 @@ private:
|
|||||||
void RegisterHandlersBase(const FunctionInfoBase* functions, std::size_t n);
|
void RegisterHandlersBase(const FunctionInfoBase* functions, std::size_t n);
|
||||||
void ReportUnimplementedFunction(u32* cmd_buf, const FunctionInfoBase* info);
|
void ReportUnimplementedFunction(u32* cmd_buf, const FunctionInfoBase* info);
|
||||||
|
|
||||||
|
void Empty(Kernel::HLERequestContext& ctx) {}
|
||||||
|
|
||||||
/// Identifier string used to connect to the service.
|
/// Identifier string used to connect to the service.
|
||||||
std::string service_name;
|
std::string service_name;
|
||||||
/// Maximum number of concurrent sessions that this service can handle.
|
/// Maximum number of concurrent sessions that this service can handle.
|
||||||
@ -134,9 +137,11 @@ protected:
|
|||||||
*/
|
*/
|
||||||
constexpr FunctionInfo(u32 command_id, HandlerFnP<Self> handler_callback, const char* name)
|
constexpr FunctionInfo(u32 command_id, HandlerFnP<Self> handler_callback, const char* name)
|
||||||
: FunctionInfoBase{
|
: FunctionInfoBase{
|
||||||
command_id,
|
command_id, handler_callback != nullptr,
|
||||||
// Type-erase member function pointer by casting it down to the base class.
|
// Type-erase member function pointer by casting it down to the base class.
|
||||||
static_cast<HandlerFnP<ServiceFrameworkBase>>(handler_callback), name} {}
|
handler_callback ? static_cast<HandlerFnP<ServiceFrameworkBase>>(handler_callback)
|
||||||
|
: &ServiceFrameworkBase::Empty,
|
||||||
|
name} {}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user