Open-source multiplayer game server compatible with the RuneScape client
https://www.openrs2.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
961 B
48 lines
961 B
package org.openrs2.compress.bzip2
|
|
|
|
import java.io.Closeable
|
|
import java.io.Flushable
|
|
import java.io.OutputStream
|
|
|
|
public class BitOutputStream(
|
|
private val output: OutputStream
|
|
) : Flushable, Closeable {
|
|
private var buf: Int = 0
|
|
private var live: Int = 0
|
|
|
|
public fun writeBits(n: Int, v: Int) {
|
|
while (live >= 8) {
|
|
output.write(buf ushr 24)
|
|
buf = buf shl 8
|
|
live -= 8
|
|
}
|
|
|
|
buf = buf or (v shl (32 - live - n))
|
|
live += n
|
|
}
|
|
|
|
public fun writeBoolean(v: Boolean) {
|
|
writeBits(1, if (v) 1 else 0)
|
|
}
|
|
|
|
public fun writeByte(v: Int) {
|
|
writeBits(8, v)
|
|
}
|
|
|
|
public fun writeInt(v: Int) {
|
|
writeBits(32, v)
|
|
}
|
|
|
|
override fun flush() {
|
|
while (live > 0) {
|
|
output.write(buf ushr 24)
|
|
buf = buf shl 8
|
|
live -= 8
|
|
}
|
|
}
|
|
|
|
override fun close() {
|
|
flush()
|
|
output.close()
|
|
}
|
|
}
|
|
|