From b77fc3c3e30a998bbac3955eb8b9fb92a5626bc3 Mon Sep 17 00:00:00 2001 From: Aleksandr Veselov Date: Thu, 6 Feb 2025 18:55:27 +0300 Subject: [PATCH 1/2] WIP serializer.toReturnBuffer --- interop/src/cpp/SerializerBase.h | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/interop/src/cpp/SerializerBase.h b/interop/src/cpp/SerializerBase.h index d631a0a2a..e81e9f16b 100644 --- a/interop/src/cpp/SerializerBase.h +++ b/interop/src/cpp/SerializerBase.h @@ -27,6 +27,7 @@ #include "callback-resource.h" #include "interop-types.h" +#include "koala-types.h" #ifdef __arm__ #define KOALA_NO_UNALIGNED_ACCESS 1 @@ -89,12 +90,15 @@ public: data(data), dataLength(dataLength), position(0), ownData(false), resourceHolder(resourceHolder) { } - ~SerializerBase() { + virtual ~SerializerBase() { if (ownData) { free(data); } } + SerializerBase(const SerializerBase&) = delete; + SerializerBase& operator=(const SerializerBase&) = delete; + void* release() { ownData = false; return data; @@ -245,6 +249,16 @@ public: writePointer((void*)buffer.data); writeInt64(buffer.length); } + + KInteropReturnBuffer toReturnBuffer() { + if (this->ownData) { + KInteropReturnBuffer buffer {this->length(), this->release(), [](KNativePointer data, KInt length) { free(data); }}; + // TODO fix memory issues + return buffer; + } else { + return {this->length(), this->data, nullptr}; + } + } }; #endif // _SERIALIZER_BASE_H \ No newline at end of file -- Gitee From 580a21f621b27650c77104ecca94da67b4bea6c8 Mon Sep 17 00:00:00 2001 From: Aleksandr Veselov Date: Fri, 14 Feb 2025 12:26:55 +0300 Subject: [PATCH 2/2] Add KInteropReturnBuffer interop type for TS --- interop/src/interop/InteropTypes.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/interop/src/interop/InteropTypes.ts b/interop/src/interop/InteropTypes.ts index af04a1c55..0324145d8 100644 --- a/interop/src/interop/InteropTypes.ts +++ b/interop/src/interop/InteropTypes.ts @@ -28,3 +28,4 @@ export type KBoolean = int32 export type KPointer = number | bigint export type pointer = KPointer export type KNativePointer = KPointer +export type KInteropReturnBuffer = Uint8Array \ No newline at end of file -- Gitee