aboutsummaryrefslogtreecommitdiff
path: root/okio/src/nonAppleMain/kotlin/okio/SegmentedByteString.kt
diff options
context:
space:
mode:
Diffstat (limited to 'okio/src/nonAppleMain/kotlin/okio/SegmentedByteString.kt')
-rw-r--r--okio/src/nonAppleMain/kotlin/okio/SegmentedByteString.kt103
1 files changed, 103 insertions, 0 deletions
diff --git a/okio/src/nonAppleMain/kotlin/okio/SegmentedByteString.kt b/okio/src/nonAppleMain/kotlin/okio/SegmentedByteString.kt
new file mode 100644
index 00000000..485d834e
--- /dev/null
+++ b/okio/src/nonAppleMain/kotlin/okio/SegmentedByteString.kt
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2015 Square, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package okio
+
+import okio.internal.HashFunction
+import okio.internal.commonCopyInto
+import okio.internal.commonEquals
+import okio.internal.commonGetSize
+import okio.internal.commonHashCode
+import okio.internal.commonInternalGet
+import okio.internal.commonRangeEquals
+import okio.internal.commonSubstring
+import okio.internal.commonToByteArray
+import okio.internal.commonWrite
+import okio.internal.forEachSegment
+
+internal actual class SegmentedByteString internal actual constructor(
+ internal actual val segments: Array<ByteArray>,
+ internal actual val directory: IntArray,
+) : ByteString(EMPTY.data) {
+
+ override fun base64() = toByteString().base64()
+
+ override fun hex() = toByteString().hex()
+
+ override fun toAsciiLowercase() = toByteString().toAsciiLowercase()
+
+ override fun toAsciiUppercase() = toByteString().toAsciiUppercase()
+
+ override fun base64Url() = toByteString().base64Url()
+
+ override fun substring(beginIndex: Int, endIndex: Int): ByteString =
+ commonSubstring(beginIndex, endIndex)
+
+ override fun internalGet(pos: Int): Byte = commonInternalGet(pos)
+
+ override fun getSize() = commonGetSize()
+
+ override fun toByteArray(): ByteArray = commonToByteArray()
+
+ override fun write(buffer: Buffer, offset: Int, byteCount: Int): Unit =
+ commonWrite(buffer, offset, byteCount)
+
+ override fun rangeEquals(
+ offset: Int,
+ other: ByteString,
+ otherOffset: Int,
+ byteCount: Int,
+ ): Boolean = commonRangeEquals(offset, other, otherOffset, byteCount)
+
+ override fun rangeEquals(
+ offset: Int,
+ other: ByteArray,
+ otherOffset: Int,
+ byteCount: Int,
+ ): Boolean = commonRangeEquals(offset, other, otherOffset, byteCount)
+
+ override fun copyInto(
+ offset: Int,
+ target: ByteArray,
+ targetOffset: Int,
+ byteCount: Int,
+ ) = commonCopyInto(offset, target, targetOffset, byteCount)
+
+ override fun indexOf(other: ByteArray, fromIndex: Int) = toByteString().indexOf(other, fromIndex)
+
+ override fun lastIndexOf(other: ByteArray, fromIndex: Int) = toByteString().lastIndexOf(
+ other,
+ fromIndex,
+ )
+
+ override fun digest(hashFunction: HashFunction): ByteString {
+ forEachSegment { data, offset, byteCount ->
+ hashFunction.update(data, offset, byteCount)
+ }
+ val digestBytes = hashFunction.digest()
+ return ByteString(digestBytes)
+ }
+
+ /** Returns a copy as a non-segmented byte string. */
+ private fun toByteString() = ByteString(toByteArray())
+
+ override fun internalArray() = toByteArray()
+
+ override fun equals(other: Any?): Boolean = commonEquals(other)
+
+ override fun hashCode(): Int = commonHashCode()
+
+ override fun toString() = toByteString().toString()
+}