1 | const max = 65536
|
2 | const cache = {}
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 | const SubOk = Buffer.isBuffer(Buffer.from([1, 2]).subarray(0, 1))
|
10 |
|
11 | function generateBuffer (i) {
|
12 | const buffer = Buffer.allocUnsafe(2)
|
13 | buffer.writeUInt8(i >> 8, 0)
|
14 | buffer.writeUInt8(i & 0x00FF, 0 + 1)
|
15 |
|
16 | return buffer
|
17 | }
|
18 |
|
19 | function generateCache () {
|
20 | for (let i = 0; i < max; i++) {
|
21 | cache[i] = generateBuffer(i)
|
22 | }
|
23 | }
|
24 |
|
25 | function genBufVariableByteInt (num) {
|
26 | const maxLength = 4
|
27 | let digit = 0
|
28 | let pos = 0
|
29 | const buffer = Buffer.allocUnsafe(maxLength)
|
30 |
|
31 | do {
|
32 | digit = num % 128 | 0
|
33 | num = num / 128 | 0
|
34 | if (num > 0) digit = digit | 0x80
|
35 |
|
36 | buffer.writeUInt8(digit, pos++)
|
37 | } while (num > 0 && pos < maxLength)
|
38 |
|
39 | if (num > 0) {
|
40 | pos = 0
|
41 | }
|
42 |
|
43 | return SubOk ? buffer.subarray(0, pos) : buffer.slice(0, pos)
|
44 | }
|
45 |
|
46 | function generate4ByteBuffer (num) {
|
47 | const buffer = Buffer.allocUnsafe(4)
|
48 | buffer.writeUInt32BE(num, 0)
|
49 | return buffer
|
50 | }
|
51 |
|
52 | module.exports = {
|
53 | cache,
|
54 | generateCache,
|
55 | generateNumber: generateBuffer,
|
56 | genBufVariableByteInt,
|
57 | generate4ByteBuffer
|
58 | }
|