| author | wenzelm |
| Fri, 21 Oct 2022 16:39:31 +0200 | |
| changeset 76351 | 2cee31cd92f0 |
| child 76352 | f2b98eb6a7a9 |
| permissions | -rw-r--r-- |
|
76351
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
1 |
/* Title: Pure/General/compress.scala |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
2 |
Author: Makarius |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
3 |
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
4 |
Support for generic data compression. |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
5 |
*/ |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
6 |
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
7 |
package isabelle |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
8 |
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
9 |
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
10 |
import org.tukaani.xz.{LZMA2Options, ArrayCache, BasicArrayCache}
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
11 |
import com.github.luben.zstd.{BufferPool, NoPool, RecyclingBufferPool,
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
12 |
ZstdInputStream, ZstdOutputStream} |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
13 |
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
14 |
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
15 |
object Compress {
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
16 |
/* options */ |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
17 |
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
18 |
object Options {
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
19 |
def apply(): Options = Options_XZ() |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
20 |
} |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
21 |
sealed abstract class Options |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
22 |
case class Options_XZ(level: Int = 3) extends Options {
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
23 |
def make: LZMA2Options = {
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
24 |
val opts = new LZMA2Options |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
25 |
opts.setPreset(level) |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
26 |
opts |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
27 |
} |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
28 |
} |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
29 |
case class Options_Zstd(level: Int = 3) extends Options |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
30 |
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
31 |
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
32 |
/* cache */ |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
33 |
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
34 |
class Cache private(val xz: ArrayCache, val zstd: BufferPool) |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
35 |
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
36 |
object Cache {
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
37 |
def none: Cache = { Zstd.init(); new Cache(ArrayCache.getDummyCache(), NoPool.INSTANCE) }
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
38 |
def make(): Cache = { Zstd.init(); new Cache(new BasicArrayCache, RecyclingBufferPool.INSTANCE) } // FIXME new pool
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
39 |
} |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
40 |
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
41 |
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
42 |
/* Scala functions in ML */ |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
43 |
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
44 |
object XZ_Compress extends Scala.Fun_Bytes("XZ.compress") {
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
45 |
val here = Scala_Project.here |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
46 |
def apply(arg: Bytes): Bytes = arg.compress(Options_XZ()) |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
47 |
} |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
48 |
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
49 |
object XZ_Uncompress extends Scala.Fun_Bytes("XZ.uncompress") {
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
50 |
val here = Scala_Project.here |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
51 |
def apply(arg: Bytes): Bytes = arg.uncompress_xz() |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
52 |
} |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
53 |
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
54 |
object Zstd_Compress extends Scala.Fun_Bytes("Zstd.compress") {
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
55 |
val here = Scala_Project.here |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
56 |
def apply(arg: Bytes): Bytes = arg.compress(Options_Zstd()) |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
57 |
} |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
58 |
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
59 |
object Zstd_Uncompress extends Scala.Fun_Bytes("Zstd.uncompress") {
|
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
60 |
val here = Scala_Project.here |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
61 |
def apply(arg: Bytes): Bytes = arg.uncompress_zstd() |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
62 |
} |
|
2cee31cd92f0
generic support for XZ and Zstd compression in Isabelle/Scala;
wenzelm
parents:
diff
changeset
|
63 |
} |