diff --git a/interop/src/cpp/SerializerBase.h b/interop/src/cpp/SerializerBase.h index d631a0a2ad959aaf1f7ca7ae1106a5db34d856ce..e81e9f16b6b537c65d04cd3a9e128673d9d867ec 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 diff --git a/interop/src/interop/InteropTypes.ts b/interop/src/interop/InteropTypes.ts index af04a1c55af7b801c0b17a603dfb21aa82be9e84..0324145d82e21e647b6920f68bfcdb44ec489192 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