diff --git a/arkoala/framework/native/src/SerializerBase.h b/arkoala/framework/native/src/SerializerBase.h index ab9bd8fcc6261608303afb48dfafb187dc4dc7da..75e14c676df04560c2659fcdf639e7e082d224ad 100644 --- a/arkoala/framework/native/src/SerializerBase.h +++ b/arkoala/framework/native/src/SerializerBase.h @@ -187,8 +187,9 @@ public: } void writeBuffer(Ark_Buffer buffer) { - writeInt64((Ark_Int64)buffer.data); + writePointer((void*)buffer.data); writeInt64(buffer.length); + writePointer((void*)buffer.cleanup); } }; diff --git a/arkoala/framework/native/src/generated/arkoala_api_generated.h b/arkoala/framework/native/src/generated/arkoala_api_generated.h index 292b317ae97c56029647c2111b4a6bfbd2e7e7fa..415c0e37e21b484d31c869abbc71931663a95575 100644 --- a/arkoala/framework/native/src/generated/arkoala_api_generated.h +++ b/arkoala/framework/native/src/generated/arkoala_api_generated.h @@ -69,6 +69,7 @@ typedef struct Ark_Buffer { void* data; int64_t length; + void (*cleanup)(void*); } Ark_Buffer; typedef float Ark_Float32; diff --git a/interop/src/cpp/common-interop.cc b/interop/src/cpp/common-interop.cc index 274577fd11b150ae178db2fae2a101b604a9f977..034142570cd3ad7e565501d5f056b28583bcad3c 100644 --- a/interop/src/cpp/common-interop.cc +++ b/interop/src/cpp/common-interop.cc @@ -54,6 +54,26 @@ napi_value getKoalaNapiCallbackDispatcher() { } return (napi_value)g_koalaNapiCallbackDispatcher.Value(); } + +Napi::Value _impl_MaterializeBuffer(Napi::Env env, Napi::Value value) { + Napi::Object obj = value.As(); + bool isLossless = false; + void* mem = (void*)obj.Get("pointer").As().Int64Value(&isLossless); + int64_t length = obj.Get("length").As().Int64Value(); + + return Napi::ArrayBuffer::New(env, mem, length); +} + +Napi::Value Node_MaterializeBuffer(const Napi::CallbackInfo& info) { + NAPI_ASSERT_INDEX(info, 0, info.Env().Undefined()); + return _impl_MaterializeBuffer(info.Env(), info[0]); +} + +__attribute__((constructor)) +static void __init_MaterializeBuffer() { + Exports::getInstance()->addImpl("_MaterializeBuffer", Node_MaterializeBuffer); \ +} + #endif #ifdef KOALA_ETS_NAPI