getComponentReader.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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 (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) {
  14. for (var i = 0; i < numberOfComponents; ++i) {
  15. result[i] = dataView.getInt8(byteOffset + i * componentTypeByteLength);
  16. }
  17. };
  18. case ComponentDatatype.UNSIGNED_BYTE:
  19. return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) {
  20. for (var i = 0; i < numberOfComponents; ++i) {
  21. result[i] = dataView.getUint8(byteOffset + i * componentTypeByteLength);
  22. }
  23. };
  24. case ComponentDatatype.SHORT:
  25. return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) {
  26. for (var i = 0; i < numberOfComponents; ++i) {
  27. result[i] = dataView.getInt16(byteOffset + i * componentTypeByteLength, true);
  28. }
  29. };
  30. case ComponentDatatype.UNSIGNED_SHORT:
  31. return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) {
  32. for (var i = 0; i < numberOfComponents; ++i) {
  33. result[i] = dataView.getUint16(byteOffset + i * componentTypeByteLength, true);
  34. }
  35. };
  36. case ComponentDatatype.INT:
  37. return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) {
  38. for (var i = 0; i < numberOfComponents; ++i) {
  39. result[i] = dataView.getInt32(byteOffset + i * componentTypeByteLength, true);
  40. }
  41. };
  42. case ComponentDatatype.UNSIGNED_INT:
  43. return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) {
  44. for (var i = 0; i < numberOfComponents; ++i) {
  45. result[i] = dataView.getUint32(byteOffset + i * componentTypeByteLength, true);
  46. }
  47. };
  48. case ComponentDatatype.FLOAT:
  49. return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) {
  50. for (var i = 0; i < numberOfComponents; ++i) {
  51. result[i] = dataView.getFloat32(byteOffset + i * componentTypeByteLength, true);
  52. }
  53. };
  54. case ComponentDatatype.DOUBLE:
  55. return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) {
  56. for (var i = 0; i < numberOfComponents; ++i) {
  57. result[i] = dataView.getFloat64(byteOffset + i * componentTypeByteLength, true);
  58. }
  59. };
  60. }
  61. }
  62. /**
  63. * A callback function that logs messages.
  64. * @callback ComponentReader
  65. *
  66. * @param {DataView} dataView The data view to read from.
  67. * @param {Number} byteOffset The byte offset applied when reading from the data view.
  68. * @param {Number} numberOfComponents The number of components to read.
  69. * @param {Number} componentTypeByteLength The byte length of each component.
  70. * @param {Number} result An array storing the components that are read.
  71. */
  72. export default getComponentReader;