diff --git a/src/Pure/General/compress.scala b/src/Pure/General/compress.scala --- a/src/Pure/General/compress.scala +++ b/src/Pure/General/compress.scala @@ -1,63 +1,67 @@ /* Title: Pure/General/compress.scala Author: Makarius Support for generic data compression. */ package isabelle import org.tukaani.xz.{LZMA2Options, ArrayCache, BasicArrayCache} import com.github.luben.zstd.{BufferPool, NoPool, RecyclingBufferPool, ZstdInputStream, ZstdOutputStream} object Compress { /* options */ object Options { def apply(): Options = Options_XZ() } sealed abstract class Options case class Options_XZ(level: Int = 3) extends Options { def make: LZMA2Options = { val opts = new LZMA2Options opts.setPreset(level) opts } } case class Options_Zstd(level: Int = 3) extends Options /* cache */ class Cache private(val xz: ArrayCache, val zstd: BufferPool) object Cache { def none: Cache = { Zstd.init(); new Cache(ArrayCache.getDummyCache(), NoPool.INSTANCE) } - def make(): Cache = { Zstd.init(); new Cache(new BasicArrayCache, RecyclingBufferPool.INSTANCE) } // FIXME new pool + def make(): Cache = { + Zstd.init() + val pool = Untyped.constructor(classOf[RecyclingBufferPool]).newInstance() + new Cache(new BasicArrayCache, pool) + } } /* Scala functions in ML */ object XZ_Compress extends Scala.Fun_Bytes("XZ.compress") { val here = Scala_Project.here def apply(arg: Bytes): Bytes = arg.compress(Options_XZ()) } object XZ_Uncompress extends Scala.Fun_Bytes("XZ.uncompress") { val here = Scala_Project.here def apply(arg: Bytes): Bytes = arg.uncompress_xz() } object Zstd_Compress extends Scala.Fun_Bytes("Zstd.compress") { val here = Scala_Project.here def apply(arg: Bytes): Bytes = arg.compress(Options_Zstd()) } object Zstd_Uncompress extends Scala.Fun_Bytes("Zstd.uncompress") { val here = Scala_Project.here def apply(arg: Bytes): Bytes = arg.uncompress_zstd() } }