VectorOfVectorInt32.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using OpenCvSharp.Internal.Util;
  2. namespace OpenCvSharp.Internal.Vectors;
  3. /// <summary>
  4. /// </summary>
  5. public class VectorOfVectorInt32 : DisposableCvObject, IStdVector<int[]>
  6. {
  7. /// <summary>
  8. /// Constructor
  9. /// </summary>
  10. public VectorOfVectorInt32()
  11. {
  12. ptr = NativeMethods.vector_vector_int_new1();
  13. }
  14. /// <summary>
  15. /// Releases unmanaged resources
  16. /// </summary>
  17. protected override void DisposeUnmanaged()
  18. {
  19. NativeMethods.vector_vector_int_delete(ptr);
  20. base.DisposeUnmanaged();
  21. }
  22. /// <summary>
  23. /// vector.size()
  24. /// </summary>
  25. public int GetSize1()
  26. {
  27. var res = NativeMethods.vector_vector_int_getSize1(ptr);
  28. GC.KeepAlive(this);
  29. return (int)res;
  30. }
  31. /// <summary>
  32. /// vector.size()
  33. /// </summary>
  34. public int Size => GetSize1();
  35. /// <summary>
  36. /// vector[i].size()
  37. /// </summary>
  38. public IReadOnlyList<long> GetSize2()
  39. {
  40. var size1 = GetSize1();
  41. var size2 = new nuint[size1];
  42. NativeMethods.vector_vector_int_getSize2(ptr, size2);
  43. GC.KeepAlive(this);
  44. return size2.Select(s => (long)s).ToArray();
  45. }
  46. /// <summary>
  47. /// Converts std::vector to managed array
  48. /// </summary>
  49. /// <returns></returns>
  50. public int[][] ToArray()
  51. {
  52. var size1 = GetSize1();
  53. if (size1 == 0)
  54. return Array.Empty<int[]>();
  55. var size2 = GetSize2();
  56. var ret = new int[size1][];
  57. for (var i = 0; i < size1; i++)
  58. {
  59. ret[i] = new int[size2[i]];
  60. }
  61. using var retPtr = new ArrayAddress2<int>(ret);
  62. NativeMethods.vector_vector_int_copy(ptr, retPtr.GetPointer());
  63. GC.KeepAlive(this);
  64. return ret;
  65. }
  66. }