using System.Text; namespace OpenCvSharp.Internal.Vectors; /// /// public class VectorOfString : DisposableCvObject, IStdVector { /// /// Constructor /// public VectorOfString() { ptr = NativeMethods.vector_string_new1(); } /// /// Constructor /// /// public VectorOfString(nuint size) { if (size < 0) throw new ArgumentOutOfRangeException(nameof(size)); ptr = NativeMethods.vector_string_new2(size); } /// /// Releases unmanaged resources /// protected override void DisposeUnmanaged() { NativeMethods.vector_string_delete(ptr); base.DisposeUnmanaged(); } /// /// vector.size() /// public int Size { get { var res = NativeMethods.vector_string_getSize(ptr); GC.KeepAlive(this); return (int)res; } } /// /// Converts std::vector to managed array /// /// public string[] ToArray() { var size = Size; if (size == 0) return Array.Empty(); var ret = new string[size]; var cStringPointers = new IntPtr[size]; var stringLengths = new int[size]; NativeMethods.vector_string_getElements(ptr, cStringPointers, stringLengths); for (var i = 0; i < size; i++) { unsafe { ret[i] = Encoding.UTF8.GetString((byte*) cStringPointers[i], stringLengths[i]); } } GC.KeepAlive(cStringPointers); GC.KeepAlive(stringLengths); GC.KeepAlive(this); return ret; } }