Files
AncientCivil/Plugins/Puerts/Source/JsEnv/Private/DataTransfer.cpp
T
2025-02-10 00:44:11 +08:00

78 lines
2.9 KiB
C++

/*
* Tencent is pleased to support the open source community by making Puerts available.
* Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved.
* Puerts is licensed under the BSD 3-Clause License, except for the third-party components listed in the file 'LICENSE' which may
* be subject to their corresponding license terms. This file is subject to the terms and conditions defined in file 'LICENSE',
* which is part of this source code package.
*/
#include "DataTransfer.h"
#include "ObjectMapper.h"
#if USING_IN_UNREAL_ENGINE
#include "V8Utils.h"
#endif
namespace PUERTS_NAMESPACE
{
v8::Local<v8::Value> DataTransfer::FindOrAddCData(
v8::Isolate* Isolate, v8::Local<v8::Context> Context, const void* TypeId, const void* Ptr, bool PassByPointer)
{
return IsolateData<ICppObjectMapper>(Isolate)->FindOrAddCppObject(
Isolate, Context, TypeId, const_cast<void*>(Ptr), PassByPointer);
}
bool DataTransfer::IsInstanceOf(v8::Isolate* Isolate, const void* TypeId, v8::Local<v8::Object> JsObject)
{
return IsolateData<ICppObjectMapper>(Isolate)->IsInstanceOfCppObject(Isolate, TypeId, JsObject);
}
v8::Local<v8::Value> DataTransfer::UnRef(v8::Isolate* Isolate, const v8::Local<v8::Value>& Value)
{
v8::Local<v8::Context> Context = Isolate->GetCurrentContext();
v8::Local<v8::Value> ReturnValue = Value->ToObject(Context).ToLocalChecked()->Get(Context, 0).ToLocalChecked();
return ReturnValue;
}
void DataTransfer::UpdateRef(v8::Isolate* Isolate, v8::Local<v8::Value> Outer, const v8::Local<v8::Value>& Value)
{
v8::Local<v8::Context> Context = Isolate->GetCurrentContext();
auto Ret = Outer->ToObject(Context).ToLocalChecked()->Set(Context, 0, Value);
}
std::weak_ptr<int> DataTransfer::GetJsEnvLifeCycleTracker(v8::Isolate* Isolate)
{
return IsolateData<ICppObjectMapper>(Isolate)->GetJsEnvLifeCycleTracker();
}
#if USING_IN_UNREAL_ENGINE
FString DataTransfer::ToFString(v8::Isolate* Isolate, v8::Local<v8::Value> Value)
{
return FV8Utils::ToFString(Isolate, Value);
}
v8::Local<v8::Value> DataTransfer::FindOrAddObject(
v8::Isolate* Isolate, v8::Local<v8::Context>& Context, UClass* Class, UObject* UEObject)
{
return FV8Utils::IsolateData<IObjectMapper>(Isolate)->FindOrAdd(Isolate, Context, Class, UEObject);
}
v8::Local<v8::Value> DataTransfer::FindOrAddStruct(
v8::Isolate* Isolate, v8::Local<v8::Context> Context, UScriptStruct* ScriptStruct, void* Ptr, bool PassByPointer)
{
return FV8Utils::IsolateData<IObjectMapper>(Isolate)->FindOrAddStruct(Isolate, Context, ScriptStruct, Ptr, PassByPointer);
}
bool DataTransfer::IsInstanceOf(v8::Isolate* Isolate, UStruct* Struct, v8::Local<v8::Object> JsObject)
{
return FV8Utils::IsolateData<IObjectMapper>(Isolate)->IsInstanceOf(Struct, JsObject);
}
void DataTransfer::ThrowException(v8::Isolate* Isolate, const char* Message)
{
FV8Utils::ThrowException(Isolate, Message);
}
#endif
} // namespace PUERTS_NAMESPACE