Passed
Pull Request — master (#160)
by
unknown
01:51
created

src/util-size.ts   A

Complexity

Total Complexity 6
Complexity/F 1.5

Size

Lines of Code 34
Function Count 4

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 6
eloc 22
mnd 2
bc 2
fnc 4
dl 0
loc 34
rs 10
bpm 0.5
cpm 1.5
noi 0
c 0
b 0
f 0

2 Functions

Rating   Name   Duplication   Size   Complexity  
A util-size.ts ➔ getFrameSize 0 9 3
A util-size.ts ➔ decodeSize 0 10 1
1
2
/**
3
 * ID3 header size uses only 7 bits of a byte, bit shift is needed.
4
 * @returns Return a Buffer of 4 bytes with the encoded size
5
 */
6
export function encodeSize(size: number) {
7
    const byte_3 = size & 0x7F
8
    const byte_2 = (size >> 7) & 0x7F
9
    const byte_1 = (size >> 14) & 0x7F
10
    const byte_0 = (size >> 21) & 0x7F
11
    return Buffer.from([byte_0, byte_1, byte_2, byte_3])
12
}
13
14
/**
15
 * Decode the encoded size from an ID3 header.
16
 */
17
export function decodeSize(encodedSize: Buffer) {
18
    return (
19
        (encodedSize[0] << 21) +
20
        (encodedSize[1] << 14) +
21
        (encodedSize[2] << 7) +
22
        encodedSize[3]
23
    )
24
}
25
26
export function getFrameSize(buffer: Buffer, decode: boolean, version: number) {
27
    const decodeBytes = version > 2 ?
28
        [buffer[4], buffer[5], buffer[6], buffer[7]] :
29
        [buffer[3], buffer[4], buffer[5]]
30
    if (decode) {
31
        return decodeSize(Buffer.from(decodeBytes))
32
    }
33
    return Buffer.from(decodeBytes).readUIntBE(0, decodeBytes.length)
34
}
35