42 lines
1.1 KiB
C++
42 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include "utils/Expected.h"
|
|
#include "utils/Il2CppError.h"
|
|
|
|
#include <stdint.h>
|
|
|
|
struct Il2CppObject;
|
|
|
|
namespace il2cpp
|
|
{
|
|
namespace gc
|
|
{
|
|
enum GCHandleType
|
|
{
|
|
HANDLE_WEAK,
|
|
HANDLE_WEAK_TRACK,
|
|
HANDLE_NORMAL,
|
|
HANDLE_PINNED,
|
|
HANDLE_TYPE_MAX
|
|
};
|
|
|
|
const Il2CppGCHandle kEmptyGCHandle = (Il2CppGCHandle)0;
|
|
|
|
class LIBIL2CPP_CODEGEN_API GCHandle
|
|
{
|
|
public:
|
|
// external
|
|
static Il2CppGCHandle New(Il2CppObject *obj, bool pinned);
|
|
static utils::Expected<Il2CppGCHandle> NewWeakref(Il2CppObject *obj, bool track_resurrection);
|
|
static Il2CppObject* GetTarget(Il2CppGCHandle gchandle);
|
|
static GCHandleType GetHandleType(Il2CppGCHandle gcHandle);
|
|
static void Free(Il2CppGCHandle gchandle);
|
|
public:
|
|
//internal
|
|
static utils::Expected<Il2CppGCHandle> GetTargetHandle(Il2CppObject * obj, Il2CppGCHandle handle, int32_t type);
|
|
typedef void(*WalkGCHandleTargetsCallback)(Il2CppObject* obj, void* context);
|
|
static void WalkStrongGCHandleTargets(WalkGCHandleTargetsCallback callback, void* context);
|
|
};
|
|
} /* gc */
|
|
} /* il2cpp */
|