// Copyright (c) 2021 homuler // // Use of this source code is governed by an MIT-style // license that can be found in the LICENSE file or at // https://opensource.org/licenses/MIT. using System; using System.Runtime.InteropServices; namespace Mediapipe { public class StringPacket : Packet { /// /// Creates an empty instance. /// public StringPacket() : base(true) { } [UnityEngine.Scripting.Preserve] public StringPacket(IntPtr ptr, bool isOwner = true) : base(ptr, isOwner) { } public StringPacket(string value) : base() { UnsafeNativeMethods.mp__MakeStringPacket__PKc(value, out var ptr).Assert(); this.ptr = ptr; } public StringPacket(byte[] bytes) : base() { UnsafeNativeMethods.mp__MakeStringPacket__PKc_i(bytes, bytes.Length, out var ptr).Assert(); this.ptr = ptr; } public StringPacket(string value, Timestamp timestamp) : base() { UnsafeNativeMethods.mp__MakeStringPacket_At__PKc_Rt(value, timestamp.mpPtr, out var ptr).Assert(); GC.KeepAlive(timestamp); this.ptr = ptr; } public StringPacket(byte[] bytes, Timestamp timestamp) : base() { UnsafeNativeMethods.mp__MakeStringPacket_At__PKc_i_Rt(bytes, bytes.Length, timestamp.mpPtr, out var ptr).Assert(); GC.KeepAlive(timestamp); this.ptr = ptr; } public StringPacket At(Timestamp timestamp) { return At(timestamp); } public override string Get() { return MarshalStringFromNative(UnsafeNativeMethods.mp_Packet__GetString); } public byte[] GetByteArray() { UnsafeNativeMethods.mp_Packet__GetByteString(mpPtr, out var strPtr, out var size).Assert(); GC.KeepAlive(this); var bytes = new byte[size]; Marshal.Copy(strPtr, bytes, 0, size); UnsafeNativeMethods.delete_array__PKc(strPtr); return bytes; } public override StatusOr Consume() { UnsafeNativeMethods.mp_Packet__ConsumeString(mpPtr, out var statusOrStringPtr).Assert(); GC.KeepAlive(this); return new StatusOrString(statusOrStringPtr); } public override Status ValidateAsType() { UnsafeNativeMethods.mp_Packet__ValidateAsString(mpPtr, out var statusPtr).Assert(); GC.KeepAlive(this); return new Status(statusPtr); } } }