v2 / vlib / compress / lz / lz.v
57 lines · 53 sloc · 1.27 KB · 6cafb40142fca520cc21eb213dab2bc08b545e8d
Raw
1module lz
2
3// Format identifies which LZ-family codec variant to use.
4pub enum Format {
5 lz77
6 lz78
7 lzw
8 lz4
9 lzss
10 lzma
11 lzma2
12 lzjb
13}
14
15// format_from_string parses a case-insensitive format name.
16pub fn format_from_string(name string) !Format {
17 key := name.to_lower()
18 return match key {
19 'lz77' { .lz77 }
20 'lz78' { .lz78 }
21 'lzw' { .lzw }
22 'lz4' { .lz4 }
23 'lzss' { .lzss }
24 'lzma' { .lzma }
25 'lzma2' { .lzma2 }
26 'lzjb' { .lzjb }
27 else { return error('unknown lz format: ${name}') }
28 }
29}
30
31// compress compresses data with the selected LZ format.
32pub fn compress(data []u8, format Format) ![]u8 {
33 return match format {
34 .lz77 { compress_lz77(data) }
35 .lz78 { compress_lz78(data) }
36 .lzw { compress_lzw(data) }
37 .lz4 { compress_lz4(data) }
38 .lzss { compress_lzss(data) }
39 .lzma { compress_lzma(data) }
40 .lzma2 { compress_lzma2(data) }
41 .lzjb { compress_lzjb(data) }
42 }
43}
44
45// decompress decompresses data with the selected LZ format.
46pub fn decompress(data []u8, format Format) ![]u8 {
47 return match format {
48 .lz77 { decompress_lz77(data) }
49 .lz78 { decompress_lz78(data) }
50 .lzw { decompress_lzw(data) }
51 .lz4 { decompress_lz4(data) }
52 .lzss { decompress_lzss(data) }
53 .lzma { decompress_lzma(data) }
54 .lzma2 { decompress_lzma2(data) }
55 .lzjb { decompress_lzjb(data) }
56 }
57}
58