StdString.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using System.Text;
  2. namespace OpenCvSharp.Internal;
  3. /// <inheritdoc />
  4. /// <summary>
  5. /// C++ std::string
  6. /// </summary>
  7. public class StdString : DisposableCvObject
  8. {
  9. /// <inheritdoc />
  10. /// <summary>
  11. /// </summary>
  12. public StdString()
  13. {
  14. ptr = NativeMethods.string_new1();
  15. }
  16. /// <inheritdoc />
  17. /// <summary>
  18. /// </summary>
  19. /// <param name="str"></param>
  20. public StdString(string str)
  21. {
  22. if (str is null)
  23. throw new ArgumentNullException(nameof(str));
  24. var utf8Bytes = Encoding.UTF8.GetBytes(str);
  25. ptr = NativeMethods.string_new2(utf8Bytes);
  26. }
  27. /// <summary>
  28. /// Releases unmanaged resources
  29. /// </summary>
  30. protected override void DisposeUnmanaged()
  31. {
  32. NativeMethods.string_delete(ptr);
  33. base.DisposeUnmanaged();
  34. }
  35. /// <summary>
  36. /// string.size()
  37. /// </summary>
  38. public nuint Size
  39. {
  40. get
  41. {
  42. var ret = NativeMethods.string_size(ptr);
  43. GC.KeepAlive(this);
  44. return ret;
  45. }
  46. }
  47. /// <summary>
  48. /// Converts std::string to managed string
  49. /// </summary>
  50. /// <returns></returns>
  51. public new string ToString()
  52. {
  53. unsafe
  54. {
  55. var stringPointer = NativeMethods.string_c_str(ptr);
  56. var ret = Encoding.UTF8.GetString((byte*) stringPointer, (int)Size);
  57. GC.KeepAlive(this);
  58. return ret;
  59. }
  60. }
  61. }