diff --git a/src/dorkbox/bytes/ArrayExtensions.kt b/src/dorkbox/bytes/ArrayExtensions.kt index b8ecc18..35d75e7 100644 --- a/src/dorkbox/bytes/ArrayExtensions.kt +++ b/src/dorkbox/bytes/ArrayExtensions.kt @@ -15,6 +15,8 @@ */ package dorkbox.bytes +import java.util.ArrayList + object ArrayExtensions { /** * Gets the version number. @@ -127,3 +129,93 @@ fun ByteArray.xor(keyArray: ByteArray) { this[i] = (this[i].toInt() xor keyArray[keyIndex++ % keyLength].toInt()).toByte() } } + + + + + + +private val LINE_SEPARATOR = System.getProperty("line.separator", "\n") +fun ByteArray.printRaw(lineLength: Int = 0): String { + return if (lineLength > 0) { + val length = this.size + val comma = length - 1 + + val builder = StringBuilder(length + length / lineLength) + for (i in 0 until length) { + builder.append(this[i].toInt()) + if (i < comma) { + builder.append(",") + } + if (i > 0 && i % lineLength == 0) { + builder.append(LINE_SEPARATOR) + } + } + + builder.toString() + } else { + val length = this.size + val comma = length - 1 + + val builder = StringBuilder(length + length) + for (i in 0 until length) { + builder.append(this[i].toInt()) + if (i < comma) { + builder.append(",") + } + } + + builder.toString() + } +} + +fun ByteArray.print(length: Int = this.size, includeByteCount: Boolean = true): String { + return this.print(0, length, includeByteCount, 40, null) +} + +fun ByteArray.print( + inputOffset: Int, + length: Int, + includeByteCount: Boolean, + lineLength: Int = 40, + header: String? = null +): String { + val comma = length - 1 + var builderLength = length + comma + 2 + + if (includeByteCount) { + builderLength += 7 + length.toString().length + } + + if (lineLength > 0) { + builderLength += length / lineLength + } + + if (header != null) { + builderLength += header.length + 2 + } + + val builder = StringBuilder(builderLength) + if (header != null) { + builder.append(header).append(LINE_SEPARATOR) + } + + if (includeByteCount) { + builder.append("Bytes: ").append(length).append(LINE_SEPARATOR) + } + + builder.append("{") + for (i in inputOffset until length) { + builder.append(this[i].toInt()) + if (i < comma) { + builder.append(",") + } + if (i > inputOffset && lineLength > 0 && i % lineLength == 0) { + builder.append(LINE_SEPARATOR) + } + } + + builder.append("}") + + return builder.toString() +}