diff --git a/gradle.properties b/gradle.properties index bebc12a..77b31db 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ kotlin.code.style=official specifyKotlinAsDependency=false projectGroup=ru.dbotthepony.kommons -projectVersion=2.9.25 +projectVersion=2.10.0 guavaDepVersion=33.0.0 gsonDepVersion=2.8.9 diff --git a/src/main/kotlin/ru/dbotthepony/kommons/io/StreamCodec.kt b/src/main/kotlin/ru/dbotthepony/kommons/io/StreamCodec.kt index 609851d..e04a3db 100644 --- a/src/main/kotlin/ru/dbotthepony/kommons/io/StreamCodec.kt +++ b/src/main/kotlin/ru/dbotthepony/kommons/io/StreamCodec.kt @@ -108,6 +108,26 @@ interface StreamCodec { } } + class Map>(val keyCodec: StreamCodec, val valueCodec: StreamCodec, val factory: (Int) -> C): StreamCodec { + override fun read(stream: DataInputStream): C { + return stream.readMap(keyCodec::read, valueCodec::read, factory) + } + + override fun write(stream: DataOutputStream, value: C) { + stream.writeMap(value, keyCodec::write, valueCodec::write) + } + + override fun copy(value: C): C { + val new = factory.invoke(value.size) + + for ((k, v) in value.entries) { + new[keyCodec.copy(k)] = valueCodec.copy(v) + } + + return new + } + } + class Enum>(clazz: Class) : StreamCodec { val clazz = searchClass(clazz) val values: List = listOf(*this.clazz.enumConstants!!)