35 lines
1.2 KiB
C++
35 lines
1.2 KiB
C++
#pragma once
|
|
|
|
#include <string.h>
|
|
|
|
namespace il2cpp
|
|
{
|
|
namespace utils
|
|
{
|
|
class BaselibHandleUtils
|
|
{
|
|
public:
|
|
template<typename BaselibHandleType>
|
|
static void* HandleToVoidPtr(BaselibHandleType baselibHandle)
|
|
{
|
|
// following asserts check that the handle fits into void* in its entirety
|
|
static_assert(sizeof(BaselibHandleType) <= sizeof(void*), "baselib handle does not fit void*");
|
|
static_assert(sizeof(BaselibHandleType::handle) <= sizeof(void*), "baselib handle does not fit void*");
|
|
void* result = nullptr;
|
|
memcpy(&result, &baselibHandle.handle, sizeof(result));
|
|
return result;
|
|
}
|
|
|
|
template<typename BaselibHandleType>
|
|
static BaselibHandleType VoidPtrToHandle(void* ptr)
|
|
{
|
|
static_assert(sizeof(BaselibHandleType) <= sizeof(void*), "baselib handle does not fit void*");
|
|
static_assert(sizeof(BaselibHandleType::handle) <= sizeof(void*), "baselib handle does not fit void*");
|
|
decltype(BaselibHandleType::handle)result = {};
|
|
memcpy(&result, &ptr, sizeof(ptr));
|
|
return BaselibHandleType { result };
|
|
}
|
|
};
|
|
}
|
|
}
|