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;
}
}