using System.Runtime.InteropServices;
namespace OpenCvSharp.Internal.Vectors;
///
///
public class VectorOfInt32 : DisposableCvObject, IStdVector
{
///
/// Constructor
///
public VectorOfInt32()
{
ptr = NativeMethods.vector_int32_new1();
}
///
/// Constructor
///
///
public VectorOfInt32(nuint size)
{
if (size < 0)
throw new ArgumentOutOfRangeException(nameof(size));
ptr = NativeMethods.vector_int32_new2(size);
}
///
/// Constructor
///
///
public VectorOfInt32(IEnumerable data)
{
if (data is null)
throw new ArgumentNullException(nameof(data));
var array = data.ToArray();
ptr = NativeMethods.vector_int32_new3(array, (nuint)array.Length);
}
///
/// Releases unmanaged resources
///
protected override void DisposeUnmanaged()
{
NativeMethods.vector_int32_delete(ptr);
base.DisposeUnmanaged();
}
///
/// vector.size()
///
public int Size
{
get
{
var res = NativeMethods.vector_int32_getSize(ptr);
GC.KeepAlive(this);
return (int)res;
}
}
///
/// &vector[0]
///
public IntPtr ElemPtr
{
get
{
var res = NativeMethods.vector_int32_getPointer(ptr);
GC.KeepAlive(this);
return res;
}
}
///
/// Converts std::vector to managed array
///
///
public int[] ToArray()
{
var size = Size;
if (size == 0)
{
return Array.Empty();
}
var dst = new int[size];
Marshal.Copy(ElemPtr, dst, 0, dst.Length);
GC.KeepAlive(this); // ElemPtr is IntPtr to memory held by this object, so
// make sure we are not disposed until finished with copy.
return dst;
}
}