TypedArrayElementType.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. using Jint.Runtime;
  2. namespace Jint.Native.TypedArray;
  3. internal enum TypedArrayElementType : byte
  4. {
  5. // we have signed first to make comparison vaster to check if signed or unsigned type
  6. Int8,
  7. Int16,
  8. Int32,
  9. BigInt64,
  10. Float16,
  11. Float32,
  12. Float64,
  13. Uint8,
  14. Uint8C,
  15. Uint16,
  16. Uint32,
  17. BigUint64
  18. }
  19. internal static class TypedArrayExtensions
  20. {
  21. internal static byte GetElementSize(this TypedArrayElementType type)
  22. {
  23. return type switch
  24. {
  25. TypedArrayElementType.Int8 => 1,
  26. TypedArrayElementType.Uint8 => 1,
  27. TypedArrayElementType.Uint8C => 1,
  28. TypedArrayElementType.Int16 => 2,
  29. TypedArrayElementType.Uint16 => 2,
  30. TypedArrayElementType.Int32 => 4,
  31. TypedArrayElementType.Uint32 => 4,
  32. TypedArrayElementType.BigInt64 => 8,
  33. TypedArrayElementType.BigUint64 => 8,
  34. TypedArrayElementType.Float16 => 2,
  35. TypedArrayElementType.Float32 => 4,
  36. TypedArrayElementType.Float64 => 8,
  37. _ => 0
  38. };
  39. }
  40. internal static string GetTypedArrayName(this TypedArrayElementType type)
  41. {
  42. return type switch
  43. {
  44. TypedArrayElementType.Int8 => "Int8Array",
  45. TypedArrayElementType.Uint8 => "Uint8Array",
  46. TypedArrayElementType.Uint8C => "Uint8ClampedArray",
  47. TypedArrayElementType.Int16 => "Int16Array",
  48. TypedArrayElementType.Uint16 => "Uint16Array",
  49. TypedArrayElementType.Int32 => "Int32Array",
  50. TypedArrayElementType.Uint32 => "Uint32Array",
  51. TypedArrayElementType.BigInt64 => "BigInt64Array",
  52. TypedArrayElementType.BigUint64 => "BigUint64Array",
  53. TypedArrayElementType.Float16 => "Float16Array",
  54. TypedArrayElementType.Float32 => "Float32Array",
  55. TypedArrayElementType.Float64 => "Float64Array",
  56. _ => ""
  57. };
  58. }
  59. internal static IConstructor GetConstructor(this TypedArrayElementType type, Intrinsics intrinsics)
  60. {
  61. return type switch
  62. {
  63. TypedArrayElementType.Int8 => intrinsics.Int8Array,
  64. TypedArrayElementType.Uint8 => intrinsics.Uint8Array,
  65. TypedArrayElementType.Uint8C => intrinsics.Uint8ClampedArray,
  66. TypedArrayElementType.Int16 => intrinsics.Int16Array,
  67. TypedArrayElementType.Uint16 => intrinsics.Uint16Array,
  68. TypedArrayElementType.Int32 => intrinsics.Int32Array,
  69. TypedArrayElementType.Uint32 => intrinsics.Uint32Array,
  70. TypedArrayElementType.BigInt64 => intrinsics.BigInt64Array,
  71. TypedArrayElementType.BigUint64 => intrinsics.BigUint64Array,
  72. TypedArrayElementType.Float16 => intrinsics.Float16Array,
  73. TypedArrayElementType.Float32 => intrinsics.Float32Array,
  74. TypedArrayElementType.Float64 => intrinsics.Float64Array,
  75. _ => null!
  76. };
  77. }
  78. internal static bool IsUnsignedElementType(this TypedArrayElementType type)
  79. {
  80. return type > TypedArrayElementType.Float64;
  81. }
  82. internal static bool FitsInt32(this TypedArrayElementType type)
  83. {
  84. return type <= TypedArrayElementType.Int32;
  85. }
  86. internal static bool IsBigIntElementType(this TypedArrayElementType type)
  87. {
  88. return type is TypedArrayElementType.BigUint64 or TypedArrayElementType.BigInt64;
  89. }
  90. }