Marshal.hx 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package cpp.marshal;
  2. import cpp.Char;
  3. import cpp.Char16;
  4. import cpp.Float32;
  5. import cpp.Float64;
  6. import cpp.UInt8;
  7. import cpp.UInt16;
  8. import cpp.UInt32;
  9. import cpp.UInt64;
  10. import cpp.Int8;
  11. import cpp.Int16;
  12. import cpp.Int32;
  13. import cpp.Int64;
  14. import cpp.Pointer;
  15. @:semantics(value)
  16. @:cpp.ValueType({ namespace : [ 'cpp', 'marshal' ] })
  17. final extern class Marshal {
  18. /**
  19. * Returns a view to UTF8 encoded characters of the given string. The characters in the view will be null terminated.
  20. *
  21. * Depending on the internal incoding of `s` this function may allocate GC bytes.
  22. *
  23. * @param s String to return the view of.
  24. */
  25. static overload function toCharView(s:String):View<Char>;
  26. /**
  27. * Fills `buffer` with `s` encoded as UTF8 characters. The characters in the view will be null terminated.
  28. *
  29. * @param s The string to encode into the buffer.
  30. * @param buffer The view to write into.
  31. * @returns The number of characters written into `buffer`.
  32. *
  33. * @throws InvalidViewLength If `buffer` does not have enough space.
  34. */
  35. static overload function toCharView(s:String, buffer:View<Char>):Int;
  36. /**
  37. * Returns a view to UTF16 encoded characters of the given string. The characters in the view will be null terminated.
  38. *
  39. * Depending on the internal incoding of `s` this function may allocate GC bytes.
  40. *
  41. * @param s String to return the view of.
  42. */
  43. static overload function toWideCharView(s:String):View<Char16>;
  44. /**
  45. * Fills `buffer` with `s` encoded as UTF16 characters. The characters in the view will be null terminated.
  46. *
  47. * @param s The string to encode into the buffer.
  48. * @param buffer The view to write into.
  49. * @returns The number of characters written into `buffer`.
  50. *
  51. * @throws InvalidViewLength If `buffer` does not have enough space.
  52. */
  53. static overload function toWideCharView(s:String, buffer:View<Char16>):Int;
  54. /**
  55. * Allocates a string from the provided utf8 characters.
  56. *
  57. * @param buffer Buffer to characters, does not need to be null terminated.
  58. */
  59. static overload function toString(buffer:View<Char>):String;
  60. /**
  61. * Allocates a string from the provided utf16 characters.
  62. *
  63. * @param buffer Buffer to characters, does not need to be null terminated.
  64. */
  65. static overload function toString(buffer:View<Char16>):String;
  66. static function read<T>(view:View<UInt8>):T;
  67. static function readPointer<T>(view:View<UInt8>):Pointer<T>;
  68. static function readInt8(view:View<UInt8>):Int8;
  69. static function readInt16(view:View<UInt8>):Int16;
  70. static function readInt32(view:View<UInt8>):Int32;
  71. static function readInt64(view:View<UInt8>):Int64;
  72. static function readUInt8(view:View<UInt8>):UInt8;
  73. static function readUInt16(view:View<UInt8>):UInt16;
  74. static function readUInt32(view:View<UInt8>):UInt32;
  75. static function readUInt64(view:View<UInt8>):UInt64;
  76. static function readFloat32(view:View<UInt8>):Float32;
  77. static function readFloat64(view:View<UInt8>):Float64;
  78. static function readLittleEndianPointer<T>(view:View<UInt8>):Pointer<T>;
  79. static function readLittleEndianInt16(view:View<UInt8>):Int16;
  80. static function readLittleEndianInt32(view:View<UInt8>):Int32;
  81. static function readLittleEndianInt64(view:View<UInt8>):Int64;
  82. static function readLittleEndianUInt16(view:View<UInt8>):UInt16;
  83. static function readLittleEndianUInt32(view:View<UInt8>):UInt32;
  84. static function readLittleEndianUInt64(view:View<UInt8>):UInt64;
  85. static function readLittleEndianFloat32(view:View<UInt8>):Float32;
  86. static function readLittleEndianFloat64(view:View<UInt8>):Float64;
  87. static function readBigEndianPointer<T>(view:View<UInt8>):Pointer<T>;
  88. static function readBigEndianInt16(view:View<UInt8>):Int16;
  89. static function readBigEndianInt32(view:View<UInt8>):Int32;
  90. static function readBigEndianInt64(view:View<UInt8>):Int64;
  91. static function readBigEndianUInt16(view:View<UInt8>):UInt16;
  92. static function readBigEndianUInt32(view:View<UInt8>):UInt32;
  93. static function readBigEndianUInt64(view:View<UInt8>):UInt64;
  94. static function readBigEndianFloat32(view:View<UInt8>):Float32;
  95. static function readBigEndianFloat64(view:View<UInt8>):Float64;
  96. static function write<T>(view:View<UInt8>, value:T):Void;
  97. static function writePointer<T>(view:View<UInt8>, value:Pointer<T>):Void;
  98. static function writeInt8(view:View<UInt8>, value:Int8):Void;
  99. static function writeInt16(view:View<UInt8>, value:Int16):Void;
  100. static function writeInt32(view:View<UInt8>, value:Int32):Void;
  101. static function writeInt64(view:View<UInt8>, value:Int64):Void;
  102. static function writeUInt8(view:View<UInt8>, value:UInt8):Void;
  103. static function writeUInt16(view:View<UInt8>, value:UInt16):Void;
  104. static function writeUInt32(view:View<UInt8>, value:UInt32):Void;
  105. static function writeUInt64(view:View<UInt8>, value:UInt64):Void;
  106. static function writeFloat32(view:View<UInt8>, value:Float32):Void;
  107. static function writeFloat64(view:View<UInt8>, value:Float64):Void;
  108. static function writeLittleEndianPointer<T>(view:View<UInt8>, value:Pointer<T>):Void;
  109. static function writeLittleEndianInt16(view:View<UInt8>, value:Int16):Void;
  110. static function writeLittleEndianInt32(view:View<UInt8>, value:Int32):Void;
  111. static function writeLittleEndianInt64(view:View<UInt8>, value:Int64):Void;
  112. static function writeLittleEndianUInt16(view:View<UInt8>, value:UInt16):Void;
  113. static function writeLittleEndianUInt32(view:View<UInt8>, value:UInt32):Void;
  114. static function writeLittleEndianUInt64(view:View<UInt8>, value:UInt64):Void;
  115. static function writeLittleEndianFloat32(view:View<UInt8>, value:Float32):Void;
  116. static function writeLittleEndianFloat64(view:View<UInt8>, value:Float64):Void;
  117. static function writeBigEndianPointer<T>(view:View<UInt8>, value:Pointer<T>):Void;
  118. static function writeBigEndianInt16(view:View<UInt8>, value:Int16):Void;
  119. static function writeBigEndianInt32(view:View<UInt8>, value:Int32):Void;
  120. static function writeBigEndianInt64(view:View<UInt8>, value:Int64):Void;
  121. static function writeBigEndianUInt16(view:View<UInt8>, value:UInt16):Void;
  122. static function writeBigEndianUInt32(view:View<UInt8>, value:UInt32):Void;
  123. static function writeBigEndianUInt64(view:View<UInt8>, value:UInt64):Void;
  124. static function writeBigEndianFloat32(view:View<UInt8>, value:Float32):Void;
  125. static function writeBigEndianFloat64(view:View<UInt8>, value:Float64):Void;
  126. }