MCPcopy Create free account
hub / github.com/cryptii/cryptii / performDecode

Method performDecode

src/Encoder/Integer.js:155–210  ·  view source on GitHub ↗

* Performs decode on given content. * @protected * @param {Chain} content * @return {number[]|string|Uint8Array|Chain|Promise} Decoded content

(content)

Source from the content-addressed store, hash-verified

153 * @return {number[]|string|Uint8Array|Chain|Promise} Decoded content
154 */
155 performDecode (content) {
156 const typeName = this.getSettingValue('type')
157 const typeIndex = typeNames.indexOf(typeName)
158 const bytesPerInteger = typeBytes[typeIndex]
159 const isBigEndian = this.getSettingValue('byteOrder') === 'big-endian'
160
161 // Read integers from string
162 const format = this.getSettingValue('format')
163 const integerStrings = content.getString().split(/\s+/)
164 const integers = this.createIntegerTypeArray(
165 integerStrings.length, typeName)
166
167 let i, integer, integerString
168 for (i = 0; i < integerStrings.length; i++) {
169 // Interpret empty integer strings as empty integers
170 integerString = integerStrings[i]
171 if (integerString === '') {
172 integerString = '0'
173 }
174
175 // Read format
176 switch (format) {
177 case 'binary':
178 integer = parseInt(integerString, 2)
179 break
180 case 'octal':
181 integer = parseInt(integerString, 8)
182 break
183 case 'decimal':
184 integer = parseInt(integerString, 10)
185 break
186 default:
187 integer = parseInt(integerString, 16)
188 }
189
190 // Check if integer is valid
191 if (isNaN(integer)) {
192 throw new InvalidInputError(
193 `Invalid integer '${integerString}' at index ${i}`)
194 }
195 integers[i] = integer
196 }
197
198 // Write bytes
199 const bytes = new Uint8Array(integers.length * bytesPerInteger)
200 let integerByte
201 for (i = 0; i < bytes.length; i++) {
202 integer = integers[parseInt(i / bytesPerInteger)]
203 integerByte = isBigEndian
204 ? bytesPerInteger - i % bytesPerInteger - 1
205 : i % bytesPerInteger
206 bytes[i] = (integer >> (integerByte * 8)) & 0xff
207 }
208
209 return bytes
210 }
211
212 /**

Callers

nothing calls this directly

Calls 5

getSettingValueMethod · 0.80
indexOfMethod · 0.80
splitMethod · 0.80
getStringMethod · 0.80

Tested by

no test coverage detected