getComponentReader.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. import ComponentDatatype from "../../Core/ComponentDatatype.js";
  2. /**
  3. * Returns a function to read and convert data from a DataView into an array.
  4. *
  5. * @param {number} componentType Type to convert the data to.
  6. * @returns {ComponentReader} Function that reads and converts data.
  7. *
  8. * @private
  9. */
  10. function getComponentReader(componentType) {
  11. switch (componentType) {
  12. case ComponentDatatype.BYTE:
  13. return function (
  14. dataView,
  15. byteOffset,
  16. numberOfComponents,
  17. componentTypeByteLength,
  18. result
  19. ) {
  20. for (let i = 0; i < numberOfComponents; ++i) {
  21. result[i] = dataView.getInt8(
  22. byteOffset + i * componentTypeByteLength
  23. );
  24. }
  25. };
  26. case ComponentDatatype.UNSIGNED_BYTE:
  27. return function (
  28. dataView,
  29. byteOffset,
  30. numberOfComponents,
  31. componentTypeByteLength,
  32. result
  33. ) {
  34. for (let i = 0; i < numberOfComponents; ++i) {
  35. result[i] = dataView.getUint8(
  36. byteOffset + i * componentTypeByteLength
  37. );
  38. }
  39. };
  40. case ComponentDatatype.SHORT:
  41. return function (
  42. dataView,
  43. byteOffset,
  44. numberOfComponents,
  45. componentTypeByteLength,
  46. result
  47. ) {
  48. for (let i = 0; i < numberOfComponents; ++i) {
  49. result[i] = dataView.getInt16(
  50. byteOffset + i * componentTypeByteLength,
  51. true
  52. );
  53. }
  54. };
  55. case ComponentDatatype.UNSIGNED_SHORT:
  56. return function (
  57. dataView,
  58. byteOffset,
  59. numberOfComponents,
  60. componentTypeByteLength,
  61. result
  62. ) {
  63. for (let i = 0; i < numberOfComponents; ++i) {
  64. result[i] = dataView.getUint16(
  65. byteOffset + i * componentTypeByteLength,
  66. true
  67. );
  68. }
  69. };
  70. case ComponentDatatype.INT:
  71. return function (
  72. dataView,
  73. byteOffset,
  74. numberOfComponents,
  75. componentTypeByteLength,
  76. result
  77. ) {
  78. for (let i = 0; i < numberOfComponents; ++i) {
  79. result[i] = dataView.getInt32(
  80. byteOffset + i * componentTypeByteLength,
  81. true
  82. );
  83. }
  84. };
  85. case ComponentDatatype.UNSIGNED_INT:
  86. return function (
  87. dataView,
  88. byteOffset,
  89. numberOfComponents,
  90. componentTypeByteLength,
  91. result
  92. ) {
  93. for (let i = 0; i < numberOfComponents; ++i) {
  94. result[i] = dataView.getUint32(
  95. byteOffset + i * componentTypeByteLength,
  96. true
  97. );
  98. }
  99. };
  100. case ComponentDatatype.FLOAT:
  101. return function (
  102. dataView,
  103. byteOffset,
  104. numberOfComponents,
  105. componentTypeByteLength,
  106. result
  107. ) {
  108. for (let i = 0; i < numberOfComponents; ++i) {
  109. result[i] = dataView.getFloat32(
  110. byteOffset + i * componentTypeByteLength,
  111. true
  112. );
  113. }
  114. };
  115. case ComponentDatatype.DOUBLE:
  116. return function (
  117. dataView,
  118. byteOffset,
  119. numberOfComponents,
  120. componentTypeByteLength,
  121. result
  122. ) {
  123. for (let i = 0; i < numberOfComponents; ++i) {
  124. result[i] = dataView.getFloat64(
  125. byteOffset + i * componentTypeByteLength,
  126. true
  127. );
  128. }
  129. };
  130. }
  131. }
  132. /**
  133. * A callback function that logs messages.
  134. * @callback ComponentReader
  135. *
  136. * @param {DataView} dataView The data view to read from.
  137. * @param {number} byteOffset The byte offset applied when reading from the data view.
  138. * @param {number} numberOfComponents The number of components to read.
  139. * @param {number} componentTypeByteLength The byte length of each component.
  140. * @param {number} result An array storing the components that are read.
  141. *
  142. * @private
  143. */
  144. export default getComponentReader;