58 lines
1.3 KiB
V
58 lines
1.3 KiB
V
module lz
|
|
|
|
// Format identifies which LZ-family codec variant to use.
|
|
pub enum Format {
|
|
lz77
|
|
lz78
|
|
lzw
|
|
lz4
|
|
lzss
|
|
lzma
|
|
lzma2
|
|
lzjb
|
|
}
|
|
|
|
// format_from_string parses a case-insensitive format name.
|
|
pub fn format_from_string(name string) !Format {
|
|
key := name.to_lower()
|
|
return match key {
|
|
'lz77' { .lz77 }
|
|
'lz78' { .lz78 }
|
|
'lzw' { .lzw }
|
|
'lz4' { .lz4 }
|
|
'lzss' { .lzss }
|
|
'lzma' { .lzma }
|
|
'lzma2' { .lzma2 }
|
|
'lzjb' { .lzjb }
|
|
else { return error('unknown lz format: ${name}') }
|
|
}
|
|
}
|
|
|
|
// compress compresses data with the selected LZ format.
|
|
pub fn compress(data []u8, format Format) ![]u8 {
|
|
return match format {
|
|
.lz77 { compress_lz77(data) }
|
|
.lz78 { compress_lz78(data) }
|
|
.lzw { compress_lzw(data) }
|
|
.lz4 { compress_lz4(data) }
|
|
.lzss { compress_lzss(data) }
|
|
.lzma { compress_lzma(data) }
|
|
.lzma2 { compress_lzma2(data) }
|
|
.lzjb { compress_lzjb(data) }
|
|
}
|
|
}
|
|
|
|
// decompress decompresses data with the selected LZ format.
|
|
pub fn decompress(data []u8, format Format) ![]u8 {
|
|
return match format {
|
|
.lz77 { decompress_lz77(data) }
|
|
.lz78 { decompress_lz78(data) }
|
|
.lzw { decompress_lzw(data) }
|
|
.lz4 { decompress_lz4(data) }
|
|
.lzss { decompress_lzss(data) }
|
|
.lzma { decompress_lzma(data) }
|
|
.lzma2 { decompress_lzma2(data) }
|
|
.lzjb { decompress_lzjb(data) }
|
|
}
|
|
}
|