@@ -551,7 +551,7 @@ public class IncrementalCacheImpl(targetDataRoot: File) : StorageOwner, Incremen
|
|||||||
override fun createMap(): PersistentHashMap<String, Map<String, Long>> = PersistentHashMap(
|
override fun createMap(): PersistentHashMap<String, Map<String, Long>> = PersistentHashMap(
|
||||||
File(baseDir, INLINE_FUNCTIONS),
|
File(baseDir, INLINE_FUNCTIONS),
|
||||||
EnumeratorStringDescriptor(),
|
EnumeratorStringDescriptor(),
|
||||||
InlineFunctionsMapExternalizer
|
StringToLongMapExternalizer
|
||||||
)
|
)
|
||||||
|
|
||||||
private fun getInlineFunctionsMap(bytes: ByteArray): Map<String, Long> {
|
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>() {
|
private inner class PackagePartMap : BasicMap<Boolean>() {
|
||||||
override fun createMap(): PersistentHashMap<String, Boolean> = PersistentHashMap(
|
override fun createMap(): PersistentHashMap<String, Boolean> = PersistentHashMap(
|
||||||
File(baseDir, PACKAGE_PARTS),
|
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>> {
|
private object StringListExternalizer : DataExternalizer<List<String>> {
|
||||||
override fun save(out: DataOutput, value: List<String>) {
|
override fun save(out: DataOutput, value: List<String>) {
|
||||||
value.forEach { IOUtil.writeUTF(out, it) }
|
value.forEach { IOUtil.writeUTF(out, it) }
|
||||||
|
|||||||
Reference in New Issue
Block a user