Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Convert compressor objects to reused classes #51

Merged
merged 12 commits into from
Jan 11, 2024
627 changes: 0 additions & 627 deletions src/main/java/com/displee/cache/compress/type/BZIP2Compressor.java

This file was deleted.

191 changes: 0 additions & 191 deletions src/main/java/com/displee/util/Whirlpool.java

This file was deleted.

6 changes: 5 additions & 1 deletion src/main/kotlin/com/displee/cache/CacheLibrary.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@ import com.displee.cache.index.ReferenceTable.Companion.FLAG_NAME
import com.displee.cache.index.ReferenceTable.Companion.FLAG_WHIRLPOOL
import com.displee.cache.index.archive.Archive
import com.displee.compress.CompressionType
import com.displee.compress.type.Compressors
import com.displee.io.Buffer
import com.displee.io.impl.OutputBuffer
import com.displee.util.Whirlpool
import com.displee.util.generateWhirlpool
import java.io.File
import java.io.FileNotFoundException
Expand All @@ -26,6 +28,8 @@ open class CacheLibrary(val path: String, val clearDataAfterUpdate: Boolean = fa
lateinit var mainFile: RandomAccessFile

private val indices: SortedMap<Int, Index> = TreeMap<Int, Index>()
internal val compressors = Compressors()
internal val whirlpool = Whirlpool()
var index255: Index255? = null
private var rs3 = false

Expand Down Expand Up @@ -282,7 +286,7 @@ open class CacheLibrary(val path: String, val clearDataAfterUpdate: Boolean = fa
val indexData = buffer.array()
val whirlpoolBuffer = OutputBuffer(WHIRLPOOL_SIZE + 1)
.writeByte(0)
.writeBytes(indexData.generateWhirlpool(5, indexData.size - 5))
.writeBytes(indexData.generateWhirlpool(whirlpool, 5, indexData.size - 5))
if (exponent != null && modulus != null) {
buffer.writeBytes(Buffer.cryptRSA(whirlpoolBuffer.array(), exponent, modulus))
}
Expand Down
16 changes: 10 additions & 6 deletions src/main/kotlin/com/displee/cache/index/Index.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import com.displee.cache.index.archive.ArchiveSector
import com.displee.compress.CompressionType
import com.displee.compress.compress
import com.displee.compress.decompress
import com.displee.compress.type.Compressor
import com.displee.compress.type.EmptyCompressor
import com.displee.io.impl.InputBuffer
import com.displee.io.impl.OutputBuffer
import com.displee.util.generateCrc
Expand All @@ -18,6 +20,7 @@ open class Index(origin: CacheLibrary, id: Int, val raf: RandomAccessFile) : Ref
var crc = 0
var whirlpool: ByteArray? = null
var compressionType: CompressionType = CompressionType.NONE
var compressor: Compressor = EmptyCompressor
private var cached = false
protected var closed = false

Expand All @@ -34,9 +37,10 @@ open class Index(origin: CacheLibrary, id: Int, val raf: RandomAccessFile) : Ref
val archiveSector = origin.index255?.readArchiveSector(id) ?: return
val archiveSectorData = archiveSector.data
crc = archiveSectorData.generateCrc()
whirlpool = archiveSectorData.generateWhirlpool()
read(InputBuffer(archiveSector.decompress()))
whirlpool = archiveSectorData.generateWhirlpool(origin.whirlpool)
read(InputBuffer(archiveSector.decompress(origin.compressors)))
compressionType = archiveSector.compressionType
compressor = archiveSector.compressor
}

fun cache() {
Expand Down Expand Up @@ -71,9 +75,9 @@ open class Index(origin: CacheLibrary, id: Int, val raf: RandomAccessFile) : Ref
it.revision++
it.unFlag()
listener?.notify((i / flaggedArchives.size) * 0.80, "Repacking archive ${it.id}...")
val compressed = it.write().compress(it.compressionType ?: CompressionType.GZIP, it.xtea, it.revision)
val compressed = it.write().compress(it.compressionType, it.compressor, it.xtea, it.revision)
it.crc = compressed.generateCrc(length = compressed.size - 2)
it.whirlpool = compressed.generateWhirlpool(length = compressed.size - 2)
it.whirlpool = compressed.generateWhirlpool(origin.whirlpool, length = compressed.size - 2)
val written = writeArchiveSector(it.id, compressed)
check(written) { "Unable to write data to archive sector. Your cache may be corrupt." }
if (origin.clearDataAfterUpdate) {
Expand All @@ -87,9 +91,9 @@ open class Index(origin: CacheLibrary, id: Int, val raf: RandomAccessFile) : Ref
if (flagged()) {
unFlag()
revision++
val indexData = write().compress(compressionType)
val indexData = write().compress(compressionType, compressor)
crc = indexData.generateCrc()
whirlpool = indexData.generateWhirlpool()
whirlpool = indexData.generateWhirlpool(origin.whirlpool)
val written = origin.index255?.writeArchiveSector(this.id, indexData) ?: false
check(written) { "Unable to write data to checksum table. Your cache may be corrupt." }
}
Expand Down
4 changes: 2 additions & 2 deletions src/main/kotlin/com/displee/cache/index/Index317.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class Index317(origin: CacheLibrary, id: Int, raf: RandomAccessFile) : Index(ori
crcs = readArchiveProperties(CRC_FILES[id - 1], BufferType.INT)
}
for (i in 0 until archiveLength) {
val archive = Archive317(i)
val archive = Archive317(origin.compressors.bzip2, i)
archives[i] = archive
if (versions == null || crcs == null || i >= versions.size) {
continue
Expand Down Expand Up @@ -59,7 +59,7 @@ class Index317(origin: CacheLibrary, id: Int, raf: RandomAccessFile) : Index(ori
listener?.notify((i / flaggedArchives.size) * 0.80, "Repacking archive ${it.id}...")
val compressed = it.write()
it.crc = compressed.generateCrc()
it.whirlpool = compressed.generateWhirlpool()
it.whirlpool = compressed.generateWhirlpool(origin.whirlpool)
val written = writeArchiveSector(it.id, compressed)
check(written) { "Unable to write data to archive sector. Your cache may be corrupt." }
if (origin.clearDataAfterUpdate) {
Expand Down
10 changes: 7 additions & 3 deletions src/main/kotlin/com/displee/cache/index/ReferenceTable.kt
Original file line number Diff line number Diff line change
Expand Up @@ -229,13 +229,15 @@ open class ReferenceTable(protected val origin: CacheLibrary, val id: Int) : Com
}
if (existing == null) {
if (this is Index317) {
existing = Archive317(id, if (hashName == -1) 0 else hashName)
existing = Archive317(origin.compressors.bzip2, id, if (hashName == -1) 0 else hashName)
if (this.id != 0) {
existing.compressionType = CompressionType.GZIP
existing.compressor = origin.compressors.gzip
}
} else {
existing = Archive(id, if (hashName == -1) 0 else hashName, xtea)
existing.compressionType = CompressionType.GZIP
existing.compressor = origin.compressors.gzip
}
if (hashName != -1) {
archiveNames.add(existing.hashName)
Expand Down Expand Up @@ -294,11 +296,13 @@ open class ReferenceTable(protected val origin: CacheLibrary, val id: Int) : Com
} else {
val is317 = is317()
if (is317) {
(archive as Archive317).compressionType = if (this.id == 0) CompressionType.BZIP2 else CompressionType.GZIP
archive.compressionType = if (this.id == 0) CompressionType.BZIP2 else CompressionType.GZIP
archive.compressor = origin.compressors.get(archive.compressionType)
archive.read(InputBuffer(sector.data))
} else {
val decompressed = sector.decompress(xtea)
val decompressed = sector.decompress(origin.compressors, xtea)
archive.compressionType = sector.compressionType
archive.compressor = sector.compressor
if (decompressed.isNotEmpty()) {
archive.read(InputBuffer(decompressed))
archive.xtea = xtea
Expand Down
10 changes: 8 additions & 2 deletions src/main/kotlin/com/displee/cache/index/archive/Archive.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,18 @@ package com.displee.cache.index.archive

import com.displee.cache.index.archive.file.File
import com.displee.compress.CompressionType
import com.displee.compress.type.Compressor
import com.displee.compress.type.Compressors
import com.displee.compress.type.EmptyCompressor
import com.displee.compress.type.GZIPCompressor
import com.displee.io.impl.InputBuffer
import com.displee.io.impl.OutputBuffer
import java.util.*

open class Archive(val id: Int, var hashName: Int = 0, internal var xtea: IntArray? = null) : Comparable<Archive> {

var compressionType: CompressionType? = null
var compressionType: CompressionType = CompressionType.GZIP
var compressor: Compressor = EmptyCompressor

var revision = 0
private var needUpdate = false
Expand Down Expand Up @@ -85,7 +90,7 @@ open class Archive(val id: Int, var hashName: Int = 0, internal var xtea: IntArr
var size = 0
files.forEach { size += it.data?.size ?: 0 }
val buffer = OutputBuffer(size + files.size * 4)
val emptyByteArray = byteArrayOf()
val emptyByteArray = byteArrayOf()
if (files.size == 1) {
return first()?.data ?: emptyByteArray
} else {
Expand Down Expand Up @@ -273,6 +278,7 @@ open class Archive(val id: Int, var hashName: Int = 0, internal var xtea: IntArr
if (read) {
//bzip2 compression fails when xteas are set for some reason, cheap fix
compressionType = CompressionType.GZIP
compressor = GZIPCompressor()
flag()
}
}
Expand Down
Loading