Generalize InlineFunctionsMapExternalizer

Original commit: dfa5a420e6
This commit is contained in:
Alexey Tsvetkov
2015-07-24 16:14:41 +03:00
parent 8b99bd7002
commit 6a7f1bc7fe
@@ -551,7 +551,7 @@ public class IncrementalCacheImpl(targetDataRoot: File) : StorageOwner, Incremen
override fun createMap(): PersistentHashMap<String, Map<String, Long>> = PersistentHashMap(
File(baseDir, INLINE_FUNCTIONS),
EnumeratorStringDescriptor(),
InlineFunctionsMapExternalizer
StringToLongMapExternalizer
)
private fun getInlineFunctionsMap(bytes: ByteArray): Map<String, Long> {
@@ -637,31 +637,6 @@ public class IncrementalCacheImpl(targetDataRoot: File) : StorageOwner, Incremen
}
}
private object InlineFunctionsMapExternalizer : DataExternalizer<Map<String, Long>> {
override fun save(out: DataOutput, map: Map<String, Long>?) {
out.writeInt(map!!.size())
for (name in map.keySet()) {
IOUtil.writeString(name, out)
out.writeLong(map[name]!!)
}
}
override fun read(`in`: DataInput): Map<String, Long>? {
val size = `in`.readInt()
val map = HashMap<String, Long>(size)
repeat(size) {
val name = IOUtil.readString(`in`)!!
val value = `in`.readLong()
map[name] = value
}
return map
}
}
private inner class PackagePartMap : BasicMap<Boolean>() {
override fun createMap(): PersistentHashMap<String, Boolean> = PersistentHashMap(
File(baseDir, PACKAGE_PARTS),
@@ -819,6 +794,41 @@ private object ByteArrayExternalizer : DataExternalizer<ByteArray> {
}
}
private abstract class StringMapExternalizer<T> : DataExternalizer<Map<String, T>> {
override fun save(out: DataOutput, map: Map<String, T>?) {
out.writeInt(map!!.size())
for ((key, value) in map.entrySet()) {
IOUtil.writeString(key, out)
writeValue(out, value)
}
}
override fun read(`in`: DataInput): Map<String, T>? {
val size = `in`.readInt()
val map = HashMap<String, T>(size)
repeat(size) {
val name = IOUtil.readString(`in`)!!
map[name] = readValue(`in`)
}
return map
}
protected abstract fun writeValue(output: DataOutput, value: T)
protected abstract fun readValue(input: DataInput): T
}
private object StringToLongMapExternalizer : StringMapExternalizer<Long>() {
override fun readValue(input: DataInput): Long =
input.readLong()
override fun writeValue(output: DataOutput, value: Long) {
output.writeLong(value)
}
}
private object StringListExternalizer : DataExternalizer<List<String>> {
override fun save(out: DataOutput, value: List<String>) {
value.forEach { IOUtil.writeUTF(out, it) }