* Performs encode on given content. * @protected * @param {Chain} content * @return {number[]|string|Uint8Array|Chain|Promise} Encoded content
(content)
| 93 | * @return {number[]|string|Uint8Array|Chain|Promise} Encoded content |
| 94 | */ |
| 95 | performEncode (content) { |
| 96 | const typeName = this.getSettingValue('type') |
| 97 | const typeIndex = typeNames.indexOf(typeName) |
| 98 | const bytesPerInteger = typeBytes[typeIndex] |
| 99 | const isBigEndian = this.getSettingValue('byteOrder') === 'big-endian' |
| 100 | |
| 101 | let size = content.getSize() |
| 102 | if (size % bytesPerInteger !== 0) { |
| 103 | size += bytesPerInteger - size % bytesPerInteger |
| 104 | } |
| 105 | |
| 106 | const bytes = new Uint8Array(size) |
| 107 | bytes.set(content.getBytes()) |
| 108 | |
| 109 | // Collect integers |
| 110 | const integers = this.createIntegerTypeArray( |
| 111 | size / bytesPerInteger, typeName) |
| 112 | let integer = 0 |
| 113 | let i = 0 |
| 114 | while (i < bytes.length) { |
| 115 | if (isBigEndian) { |
| 116 | integer = (integer << 8) | bytes[i] |
| 117 | } else { |
| 118 | integer = integer | bytes[i] << (i % bytesPerInteger * 8) |
| 119 | } |
| 120 | if (++i % bytesPerInteger === 0) { |
| 121 | integers[i / bytesPerInteger - 1] = integer |
| 122 | integer = 0 |
| 123 | } |
| 124 | } |
| 125 | |
| 126 | // Convert integers to strings |
| 127 | const format = this.getSettingValue('format') |
| 128 | const integerStrings = [] |
| 129 | |
| 130 | for (i = 0; i < integers.length; i++) { |
| 131 | switch (format) { |
| 132 | case 'binary': |
| 133 | integerStrings.push(integers[i].toString(2)) |
| 134 | break |
| 135 | case 'octal': |
| 136 | integerStrings.push(integers[i].toString(8)) |
| 137 | break |
| 138 | case 'decimal': |
| 139 | integerStrings.push(integers[i].toString(10)) |
| 140 | break |
| 141 | default: |
| 142 | integerStrings.push(integers[i].toString(16)) |
| 143 | } |
| 144 | } |
| 145 | |
| 146 | return integerStrings.join(' ') |
| 147 | } |
| 148 | |
| 149 | /** |
| 150 | * Performs decode on given content. |
nothing calls this directly
no test coverage detected