Guest User

Untitled

a guest
Dec 13th, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.36 KB | None | 0 0
  1. class Bytearray extends Array {
  2. constructor () {
  3. super()
  4. this.offset = 0
  5. this.INSPECT_MAX_BYTES = 8
  6. }
  7.  
  8. writeUIntLE (value, byteLength) {
  9. value = +value
  10. let offset = this.offset
  11. offset = offset >>> 0
  12. byteLength = byteLength >>> 0
  13.  
  14. var mul = 1
  15. var i = 0
  16. this[offset] = value
  17. while (++i < byteLength && (mul *= 0x100)) { this[offset + i] = (value / mul) >>> 0 }
  18. return this.offset += byteLength
  19. }
  20.  
  21. writeUIntBE (value, byteLength) {
  22. value = +value
  23. let offset = this.offset
  24. offset = offset >>> 0
  25. byteLength = byteLength >>> 0
  26.  
  27. var i = byteLength - 1
  28. var mul = 1
  29. this[offset + i] = value
  30. while (--i >= 0 && (mul *= 0x100)) { this[offset + i] = (value / mul) >>> 0 }
  31.  
  32. return this.offset += byteLength
  33. }
  34.  
  35. writeUInt8 (value) {
  36. value = +value
  37. let offset = this.offset
  38. offset = offset >>> 0
  39. this[offset] = value
  40. return this.offset += 1
  41. }
  42.  
  43. writeUInt16LE (value) {
  44. value = +value
  45. let offset = this.offset
  46. offset = offset >>> 0
  47.  
  48. this[offset] = value
  49. this[offset + 1] = (value >>> 8)
  50. return this.offset += 2
  51. }
  52.  
  53. writeUInt16BE (value) {
  54. value = +value
  55. let offset = this.offset
  56. offset = offset >>> 0
  57.  
  58. this[offset] = (value >>> 8)
  59. this[offset + 1] = value
  60. return this.offset += 2
  61. }
  62.  
  63. writeUInt32LE (value) {
  64. value = +value
  65. let offset = this.offset
  66. offset = offset >>> 0
  67.  
  68. this[offset + 3] = (value >>> 24)
  69. this[offset + 2] = (value >>> 16)
  70. this[offset + 1] = (value >>> 8)
  71. this[offset] = value
  72. return this.offset += 4
  73. }
  74.  
  75. writeUInt32BE (value) {
  76. value = +value
  77. let offset = this.offset
  78. offset = offset >>> 0
  79. this[offset] = (value >>> 24)
  80. this[offset + 1] = (value >>> 16)
  81. this[offset + 2] = (value >>> 8)
  82. this[offset + 3] = value
  83. return this.offset += 4
  84. }
  85.  
  86. writeIntLE (value, byteLength) {
  87. value = +value
  88. let offset = this.offset
  89. offset = offset >>> 0
  90.  
  91. var i = 0
  92. var mul = 1
  93. var sub = 0
  94. this[offset] = value
  95. while (++i < byteLength && (mul *= 0x100)) {
  96. if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { sub = 1 }
  97. this[offset + i] = ((value / mul) >> 0) - sub
  98. }
  99.  
  100. return this.offset += byteLength
  101. }
  102.  
  103. writeIntBE (value, byteLength) {
  104. value = +value
  105. let offset = this.offset
  106. offset = offset >>> 0
  107.  
  108. var i = byteLength - 1
  109. var mul = 1
  110. var sub = 0
  111. this[offset + i] = value
  112. while (--i >= 0 && (mul *= 0x100)) {
  113. if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { sub = 1 }
  114. this[offset + i] = ((value / mul) >> 0) - sub
  115. }
  116.  
  117. return this.offset += byteLength
  118. }
  119.  
  120. writeInt8 (value) {
  121. value = +value
  122. let offset = this.offset
  123. offset = offset >>> 0
  124.  
  125. this[offset] = value
  126. return this.offset += 1
  127. }
  128.  
  129. writeInt16LE (value) {
  130. value = +value
  131. let offset = this.offset
  132. offset = offset >>> 0
  133.  
  134. this[offset] = value
  135. this[offset + 1] = (value >>> 8)
  136. return this.offset += 2
  137. }
  138.  
  139. writeInt16BE (value) {
  140. value = +value
  141. let offset = this.offset
  142. offset = offset >>> 0
  143.  
  144. this[offset] = (value >>> 8)
  145. this[offset + 1] = value
  146. return this.offset += 2
  147. }
  148.  
  149. writeInt32LE (value) {
  150. value = +value
  151. let offset = this.offset
  152. offset = offset >>> 0
  153. this[offset] = value
  154. this[offset + 1] = (value >>> 8)
  155. this[offset + 2] = (value >>> 16)
  156. this[offset + 3] = (value >>> 24)
  157. return this.offset += 4
  158. }
  159.  
  160. writeInt32BE (value, noAssert) {
  161. value = +value
  162. let offset = this.offset
  163. offset = offset >>> 0
  164. this[offset] = (value >>> 24)
  165. this[offset + 1] = (value >>> 16)
  166. this[offset + 2] = (value >>> 8)
  167. this[offset + 3] = value
  168. return this.offset += 4
  169. }
  170.  
  171. append (Buf) {
  172. for (let i of Buf) {
  173. this.push(i)
  174. this.offset++
  175. }
  176. return this.offset
  177. }
  178.  
  179. write (...args) {
  180. // cheating again xd
  181. let encoded = Buffer.alloc(args[0].length)
  182. encoded.write.apply(encoded, args)
  183. this.append(encoded)
  184. }
  185.  
  186. toString (...args) {
  187. // cheating a bit xd
  188. return Buffer.prototype.toString.apply(Buffer.from(this), args)
  189. }
  190.  
  191. inspect () {
  192. var str = ''
  193. var max = this.INSPECT_MAX_BYTES
  194. str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()
  195. if (this.length > max) { str += ' ... ' }
  196. return `<${this.constructor.name} ${str}>`
  197. }
  198. }
  199.  
  200. module.exports = Bytearray
Add Comment
Please, Sign In to add comment