package ru.dbotthepony.kstarbound.io import it.unimi.dsi.fastutil.bytes.ByteArrayList import ru.dbotthepony.kommons.util.IStruct2d import ru.dbotthepony.kommons.util.IStruct2i import ru.dbotthepony.kommons.io.readDouble import ru.dbotthepony.kommons.io.readLong import ru.dbotthepony.kommons.io.readSignedVarInt import ru.dbotthepony.kommons.io.writeDouble import ru.dbotthepony.kommons.io.writeLong import ru.dbotthepony.kommons.io.writeSignedVarInt import ru.dbotthepony.kommons.vector.Vector2d import ru.dbotthepony.kommons.vector.Vector2i import ru.dbotthepony.kstarbound.world.ChunkPos import java.io.DataInput import java.io.DataOutput import java.io.IOException import java.io.InputStream import java.io.OutputStream import java.io.RandomAccessFile import java.util.* import java.util.function.IntConsumer import java.util.function.IntSupplier import kotlin.collections.ArrayList fun InputStream.readByteChar(): Char { return read().toChar() } fun InputStream.readHeader(header: String) { for ((i, char) in header.withIndex()) { val read = readByteChar() if (read != char) { throw IllegalArgumentException("Malformed header at byte $i: expected $char (${char.code}) got $read (${char.code})") } } } fun InputStream.readChunkPos(): ChunkPos { return ChunkPos(readSignedVarInt(), readSignedVarInt()) }