You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[PR 2/5] Introduce unsafe API for bulk read/write ops (#334)
* Introduce unsafe API for bulk read/write ops.
The API aimed to facilitate integration
with other frameworks and libraries.
Implemented API was initially described in the "Bulk API" subsection of
#135 (comment)
Copy file name to clipboardExpand all lines: core/api/kotlinx-io-core.api
+44
Original file line number
Diff line number
Diff line change
@@ -10,7 +10,10 @@ public final class kotlinx/io/Buffer : kotlinx/io/Sink, kotlinx/io/Source {
10
10
public fun flush ()V
11
11
public final fun get (J)B
12
12
public fun getBuffer ()Lkotlinx/io/Buffer;
13
+
public final synthetic fun getHead ()Lkotlinx/io/Segment;
13
14
public final fun getSize ()J
15
+
public final synthetic fun getSizeMut ()J
16
+
public final synthetic fun getTail ()Lkotlinx/io/Segment;
14
17
public fun hintEmit ()V
15
18
public fun peek ()Lkotlinx/io/Source;
16
19
public fun readAtMostTo (Lkotlinx/io/Buffer;J)J
@@ -20,12 +23,17 @@ public final class kotlinx/io/Buffer : kotlinx/io/Sink, kotlinx/io/Source {
20
23
public fun readLong ()J
21
24
public fun readShort ()S
22
25
public fun readTo (Lkotlinx/io/RawSink;J)V
26
+
public final synthetic fun recycleTail ()V
23
27
public fun request (J)Z
24
28
public fun require (J)V
29
+
public final synthetic fun setHead (Lkotlinx/io/Segment;)V
30
+
public final synthetic fun setSizeMut (J)V
31
+
public final synthetic fun setTail (Lkotlinx/io/Segment;)V
25
32
public fun skip (J)V
26
33
public fun toString ()Ljava/lang/String;
27
34
public fun transferFrom (Lkotlinx/io/RawSource;)J
28
35
public fun transferTo (Lkotlinx/io/RawSink;)J
36
+
public final synthetic fun writableSegment (I)Lkotlinx/io/Segment;
29
37
public fun write (Lkotlinx/io/Buffer;J)V
30
38
public fun write (Lkotlinx/io/RawSource;J)V
31
39
public fun write ([BII)V
@@ -92,6 +100,24 @@ public abstract interface class kotlinx/io/RawSource : java/lang/AutoCloseable {
92
100
public abstract fun readAtMostTo (Lkotlinx/io/Buffer;J)J
93
101
}
94
102
103
+
public final class kotlinx/io/Segment {
104
+
public synthetic fun <init> ([BIIZZLkotlin/jvm/internal/DefaultConstructorMarker;)V
105
+
public final synthetic fun dataAsByteArray (Z)[B
106
+
public final synthetic fun getLimit ()I
107
+
public final synthetic fun getNext ()Lkotlinx/io/Segment;
108
+
public final synthetic fun getPos ()I
109
+
public final synthetic fun getRemainingCapacity ()I
110
+
public final synthetic fun getSize ()I
111
+
public final synthetic fun setLimit (I)V
112
+
public final synthetic fun setNext (Lkotlinx/io/Segment;)V
113
+
public final synthetic fun setPos (I)V
114
+
public final synthetic fun writeBackData ([BI)V
115
+
}
116
+
117
+
public final class kotlinx/io/SegmentKt {
118
+
public static final fun isEmpty (Lkotlinx/io/Segment;)Z
119
+
}
120
+
95
121
public abstract interface class kotlinx/io/Sink : kotlinx/io/RawSink {
96
122
public abstract fun emit ()V
97
123
public abstract fun flush ()V
@@ -186,6 +212,9 @@ public final class kotlinx/io/SourcesKt {
186
212
public static final fun startsWith (Lkotlinx/io/Source;B)Z
187
213
}
188
214
215
+
public abstract interface annotation class kotlinx/io/UnsafeIoApi : java/lang/annotation/Annotation {
216
+
}
217
+
189
218
public final class kotlinx/io/Utf8Kt {
190
219
public static final fun readCodePointValue (Lkotlinx/io/Source;)I
191
220
public static final fun readLine (Lkotlinx/io/Source;)Ljava/lang/String;
@@ -253,3 +282,18 @@ public final class kotlinx/io/files/PathsKt {
253
282
public static final fun sourceDeprecated (Lkotlinx/io/files/Path;)Lkotlinx/io/Source;
254
283
}
255
284
285
+
public final class kotlinx/io/unsafe/UnsafeBufferOperations {
286
+
public static final field INSTANCE Lkotlinx/io/unsafe/UnsafeBufferOperations;
287
+
public final fun getMaxSafeWriteCapacity ()I
288
+
public final fun moveToTail (Lkotlinx/io/Buffer;[BII)V
289
+
public static synthetic fun moveToTail$default (Lkotlinx/io/unsafe/UnsafeBufferOperations;Lkotlinx/io/Buffer;[BIIILjava/lang/Object;)V
290
+
public final fun readFromHead (Lkotlinx/io/Buffer;Lkotlin/jvm/functions/Function3;)V
291
+
public final fun writeToTail (Lkotlinx/io/Buffer;ILkotlin/jvm/functions/Function3;)V
292
+
}
293
+
294
+
public final class kotlinx/io/unsafe/UnsafeBufferOperationsJvmKt {
295
+
public static final fun readBulk (Lkotlinx/io/unsafe/UnsafeBufferOperations;Lkotlinx/io/Buffer;[Ljava/nio/ByteBuffer;Lkotlin/jvm/functions/Function2;)V
296
+
public static final fun readFromHead (Lkotlinx/io/unsafe/UnsafeBufferOperations;Lkotlinx/io/Buffer;Lkotlin/jvm/functions/Function1;)V
297
+
public static final fun writeToTail (Lkotlinx/io/unsafe/UnsafeBufferOperations;Lkotlinx/io/Buffer;ILkotlin/jvm/functions/Function1;)V
Copy file name to clipboardExpand all lines: core/api/kotlinx-io-core.klib.api
+40-1
Original file line number
Diff line number
Diff line change
@@ -55,12 +55,14 @@ final class kotlinx.io/Buffer : kotlinx.io/Sink, kotlinx.io/Source { // kotlinx.
55
55
final fun readLong(): kotlin/Long // kotlinx.io/Buffer.readLong|readLong(){}[0]
56
56
final fun readShort(): kotlin/Short // kotlinx.io/Buffer.readShort|readShort(){}[0]
57
57
final fun readTo(kotlinx.io/RawSink, kotlin/Long) // kotlinx.io/Buffer.readTo|readTo(kotlinx.io.RawSink;kotlin.Long){}[0]
58
+
final fun recycleTail() // kotlinx.io/Buffer.recycleTail|recycleTail(){}[0]
58
59
final fun request(kotlin/Long): kotlin/Boolean // kotlinx.io/Buffer.request|request(kotlin.Long){}[0]
59
60
final fun require(kotlin/Long) // kotlinx.io/Buffer.require|require(kotlin.Long){}[0]
60
61
final fun skip(kotlin/Long) // kotlinx.io/Buffer.skip|skip(kotlin.Long){}[0]
61
62
final fun toString(): kotlin/String // kotlinx.io/Buffer.toString|toString(){}[0]
62
63
final fun transferFrom(kotlinx.io/RawSource): kotlin/Long // kotlinx.io/Buffer.transferFrom|transferFrom(kotlinx.io.RawSource){}[0]
63
64
final fun transferTo(kotlinx.io/RawSink): kotlin/Long // kotlinx.io/Buffer.transferTo|transferTo(kotlinx.io.RawSink){}[0]
65
+
final fun writableSegment(kotlin/Int): kotlinx.io/Segment // kotlinx.io/Buffer.writableSegment|writableSegment(kotlin.Int){}[0]
64
66
final fun write(kotlin/ByteArray, kotlin/Int, kotlin/Int) // kotlinx.io/Buffer.write|write(kotlin.ByteArray;kotlin.Int;kotlin.Int){}[0]
65
67
final fun write(kotlinx.io/Buffer, kotlin/Long) // kotlinx.io/Buffer.write|write(kotlinx.io.Buffer;kotlin.Long){}[0]
66
68
final fun write(kotlinx.io/RawSource, kotlin/Long) // kotlinx.io/Buffer.write|write(kotlinx.io.RawSource;kotlin.Long){}[0]
@@ -70,8 +72,34 @@ final class kotlinx.io/Buffer : kotlinx.io/Sink, kotlinx.io/Source { // kotlinx.
70
72
final fun writeShort(kotlin/Short) // kotlinx.io/Buffer.writeShort|writeShort(kotlin.Short){}[0]
71
73
final val buffer // kotlinx.io/Buffer.buffer|{}buffer[0]
72
74
final fun <get-buffer>(): kotlinx.io/Buffer // kotlinx.io/Buffer.buffer.<get-buffer>|<get-buffer>(){}[0]
73
-
final var size // kotlinx.io/Buffer.size|{}size[0]
75
+
final val size // kotlinx.io/Buffer.size|{}size[0]
74
76
final fun <get-size>(): kotlin/Long // kotlinx.io/Buffer.size.<get-size>|<get-size>(){}[0]
77
+
final var head // kotlinx.io/Buffer.head|{}head[0]
78
+
final fun <get-head>(): kotlinx.io/Segment? // kotlinx.io/Buffer.head.<get-head>|<get-head>(){}[0]
79
+
final fun <set-head>(kotlinx.io/Segment?) // kotlinx.io/Buffer.head.<set-head>|<set-head>(kotlinx.io.Segment?){}[0]
80
+
final var sizeMut // kotlinx.io/Buffer.sizeMut|{}sizeMut[0]
81
+
final fun <get-sizeMut>(): kotlin/Long // kotlinx.io/Buffer.sizeMut.<get-sizeMut>|<get-sizeMut>(){}[0]
82
+
final fun <set-sizeMut>(kotlin/Long) // kotlinx.io/Buffer.sizeMut.<set-sizeMut>|<set-sizeMut>(kotlin.Long){}[0]
83
+
final var tail // kotlinx.io/Buffer.tail|{}tail[0]
84
+
final fun <get-tail>(): kotlinx.io/Segment? // kotlinx.io/Buffer.tail.<get-tail>|<get-tail>(){}[0]
85
+
final fun <set-tail>(kotlinx.io/Segment?) // kotlinx.io/Buffer.tail.<set-tail>|<set-tail>(kotlinx.io.Segment?){}[0]
86
+
}
87
+
final class kotlinx.io/Segment { // kotlinx.io/Segment|null[0]
88
+
final fun dataAsByteArray(kotlin/Boolean): kotlin/ByteArray // kotlinx.io/Segment.dataAsByteArray|dataAsByteArray(kotlin.Boolean){}[0]
89
+
final fun writeBackData(kotlin/ByteArray, kotlin/Int) // kotlinx.io/Segment.writeBackData|writeBackData(kotlin.ByteArray;kotlin.Int){}[0]
90
+
final val remainingCapacity // kotlinx.io/Segment.remainingCapacity|{}remainingCapacity[0]
91
+
final fun <get-remainingCapacity>(): kotlin/Int // kotlinx.io/Segment.remainingCapacity.<get-remainingCapacity>|<get-remainingCapacity>(){}[0]
92
+
final val size // kotlinx.io/Segment.size|{}size[0]
93
+
final fun <get-size>(): kotlin/Int // kotlinx.io/Segment.size.<get-size>|<get-size>(){}[0]
94
+
final var limit // kotlinx.io/Segment.limit|{}limit[0]
95
+
final fun <get-limit>(): kotlin/Int // kotlinx.io/Segment.limit.<get-limit>|<get-limit>(){}[0]
96
+
final fun <set-limit>(kotlin/Int) // kotlinx.io/Segment.limit.<set-limit>|<set-limit>(kotlin.Int){}[0]
97
+
final var next // kotlinx.io/Segment.next|{}next[0]
98
+
final fun <get-next>(): kotlinx.io/Segment? // kotlinx.io/Segment.next.<get-next>|<get-next>(){}[0]
99
+
final fun <set-next>(kotlinx.io/Segment?) // kotlinx.io/Segment.next.<set-next>|<set-next>(kotlinx.io.Segment?){}[0]
100
+
final var pos // kotlinx.io/Segment.pos|{}pos[0]
101
+
final fun <get-pos>(): kotlin/Int // kotlinx.io/Segment.pos.<get-pos>|<get-pos>(){}[0]
102
+
final fun <set-pos>(kotlin/Int) // kotlinx.io/Segment.pos.<set-pos>|<set-pos>(kotlin.Int){}[0]
75
103
}
76
104
final fun (kotlinx.io.files/Path).kotlinx.io.files/sink(): kotlinx.io/Sink // kotlinx.io.files/sink|sink@kotlinx.io.files.Path(){}[0]
77
105
final fun (kotlinx.io.files/Path).kotlinx.io.files/source(): kotlinx.io/Source // kotlinx.io.files/source|source@kotlinx.io.files.Path(){}[0]
@@ -81,6 +109,7 @@ final fun (kotlinx.io/Buffer).kotlinx.io/readString(): kotlin/String // kotlinx.
81
109
final fun (kotlinx.io/Buffer).kotlinx.io/snapshot(): kotlinx.io.bytestring/ByteString // kotlinx.io/snapshot|snapshot@kotlinx.io.Buffer(){}[0]
82
110
final fun (kotlinx.io/RawSink).kotlinx.io/buffered(): kotlinx.io/Sink // kotlinx.io/buffered|buffered@kotlinx.io.RawSink(){}[0]
83
111
final fun (kotlinx.io/RawSource).kotlinx.io/buffered(): kotlinx.io/Source // kotlinx.io/buffered|buffered@kotlinx.io.RawSource(){}[0]
112
+
final fun (kotlinx.io/Segment).kotlinx.io/isEmpty(): kotlin/Boolean // kotlinx.io/isEmpty|isEmpty@kotlinx.io.Segment(){}[0]
84
113
final fun (kotlinx.io/Sink).kotlinx.io/write(kotlinx.io.bytestring/ByteString, kotlin/Int = ..., kotlin/Int = ...) // kotlinx.io/write|write@kotlinx.io.Sink(kotlinx.io.bytestring.ByteString;kotlin.Int;kotlin.Int){}[0]
85
114
final fun (kotlinx.io/Sink).kotlinx.io/writeCodePointValue(kotlin/Int) // kotlinx.io/writeCodePointValue|writeCodePointValue@kotlinx.io.Sink(kotlin.Int){}[0]
86
115
final fun (kotlinx.io/Sink).kotlinx.io/writeDecimalLong(kotlin/Long) // kotlinx.io/writeDecimalLong|writeDecimalLong@kotlinx.io.Sink(kotlin.Long){}[0]
@@ -135,6 +164,13 @@ final fun kotlinx.io.files/Path(kotlin/String, kotlin/Array<out kotlin/String>..
135
164
final fun kotlinx.io.files/Path(kotlinx.io.files/Path, kotlin/Array<out kotlin/String>...): kotlinx.io.files/Path // kotlinx.io.files/Path|Path(kotlinx.io.files.Path;kotlin.Array<out|kotlin.String>...){}[0]
136
165
final fun kotlinx.io/discardingSink(): kotlinx.io/RawSink // kotlinx.io/discardingSink|discardingSink(){}[0]
137
166
final inline fun (kotlinx.io/Sink).kotlinx.io/writeToInternalBuffer(kotlin/Function1<kotlinx.io/Buffer, kotlin/Unit>) // kotlinx.io/writeToInternalBuffer|writeToInternalBuffer@kotlinx.io.Sink(kotlin.Function1<kotlinx.io.Buffer,kotlin.Unit>){}[0]
167
+
final object kotlinx.io.unsafe/UnsafeBufferOperations { // kotlinx.io.unsafe/UnsafeBufferOperations|null[0]
168
+
final fun moveToTail(kotlinx.io/Buffer, kotlin/ByteArray, kotlin/Int = ..., kotlin/Int = ...) // kotlinx.io.unsafe/UnsafeBufferOperations.moveToTail|moveToTail(kotlinx.io.Buffer;kotlin.ByteArray;kotlin.Int;kotlin.Int){}[0]
169
+
final inline fun readFromHead(kotlinx.io/Buffer, kotlin/Function3<kotlin/ByteArray, kotlin/Int, kotlin/Int, kotlin/Int>) // kotlinx.io.unsafe/UnsafeBufferOperations.readFromHead|readFromHead(kotlinx.io.Buffer;kotlin.Function3<kotlin.ByteArray,kotlin.Int,kotlin.Int,kotlin.Int>){}[0]
170
+
final inline fun writeToTail(kotlinx.io/Buffer, kotlin/Int, kotlin/Function3<kotlin/ByteArray, kotlin/Int, kotlin/Int, kotlin/Int>) // kotlinx.io.unsafe/UnsafeBufferOperations.writeToTail|writeToTail(kotlinx.io.Buffer;kotlin.Int;kotlin.Function3<kotlin.ByteArray,kotlin.Int,kotlin.Int,kotlin.Int>){}[0]
171
+
final val maxSafeWriteCapacity // kotlinx.io.unsafe/UnsafeBufferOperations.maxSafeWriteCapacity|{}maxSafeWriteCapacity[0]
172
+
final fun <get-maxSafeWriteCapacity>(): kotlin/Int // kotlinx.io.unsafe/UnsafeBufferOperations.maxSafeWriteCapacity.<get-maxSafeWriteCapacity>|<get-maxSafeWriteCapacity>(){}[0]
173
+
}
138
174
final val kotlinx.io.files/SystemFileSystem // kotlinx.io.files/SystemFileSystem|{}SystemFileSystem[0]
139
175
final fun <get-SystemFileSystem>(): kotlinx.io.files/FileSystem // kotlinx.io.files/SystemFileSystem.<get-SystemFileSystem>|<get-SystemFileSystem>(){}[0]
140
176
final val kotlinx.io.files/SystemPathSeparator // kotlinx.io.files/SystemPathSeparator|{}SystemPathSeparator[0]
@@ -147,6 +183,9 @@ open annotation class kotlinx.io/DelicateIoApi : kotlin/Annotation { // kotlinx.
147
183
open annotation class kotlinx.io/InternalIoApi : kotlin/Annotation { // kotlinx.io/InternalIoApi|null[0]
0 commit comments