IntArray and LongArray serialization

This commit is contained in:
Anton Bannykh
2021-04-02 17:14:59 +03:00
committed by TeamCityServer
parent 387b84b37c
commit ba5582de99
2 changed files with 49 additions and 0 deletions
@@ -36,6 +36,36 @@ abstract class IrArrayReader(private val buffer: ReadBuffer) {
class IrArrayFileReader(file: File) : IrArrayReader(ReadBuffer.WeakFileBuffer(file.javaFile()))
class IrArrayMemoryReader(bytes: ByteArray) : IrArrayReader(ReadBuffer.MemoryBuffer(bytes))
class IrIntArrayMemoryReader(bytes: ByteArray) {
val array = run {
val buffer = ReadBuffer.MemoryBuffer(bytes)
val result = IntArray(buffer.int)
for (i in result.indices) {
result[i] = buffer.int
}
result
}
}
class IrLongArrayMemoryReader(bytes: ByteArray) {
val array = run {
val buffer = ReadBuffer.MemoryBuffer(bytes)
val result = LongArray(buffer.int)
for (i in result.indices) {
result[i] = buffer.long
}
result
}
}
abstract class IrMultiArrayReader(private val buffer: ReadBuffer) {
private val indexToOffset: IntArray
private val indexIndexToOffset = mutableMapOf<Int, IntArray>()
@@ -188,3 +218,6 @@ class DeclarationIrMultiTableFileReader(file: File) :
class DeclarationIrMultiTableMemoryReader(bytes: ByteArray) :
IrMultiTableReader<DeclarationId>(ReadBuffer.MemoryBuffer(bytes), { DeclarationId(int) })
fun IrArrayReader.toArray(): Array<ByteArray> = Array(this.entryCount()) { i -> this.tableItemBytes(i) }
@@ -74,6 +74,22 @@ class IrMemoryStringWriter(private val data: List<String>) : IrMemoryWriter() {
}
}
class IrMemoryIntArrayWriter(private val data: List<Int>) : IrMemoryWriter() {
override fun writeData(dataOutput: DataOutput) {
dataOutput.writeInt(data.size)
data.forEach { dataOutput.writeInt(it) }
}
}
class IrMemoryLongArrayWriter(private val data: List<Long>) : IrMemoryWriter() {
override fun writeData(dataOutput: DataOutput) {
dataOutput.writeInt(data.size)
data.forEach { dataOutput.writeLong(it) }
}
}
class IrByteArrayWriter(private val data: List<ByteArray>) : IrFileWriter() {
override fun writeData(dataOutput: DataOutput) {
dataOutput.writeInt(data.size)