public static IKompressionConfiguration GetConfiguration(NintendoCompressionMethod method) { switch (method) { case NintendoCompressionMethod.Lz10: return(Kompression.Implementations.Compressions.Nintendo.Lz10); case NintendoCompressionMethod.Lz11: return(Kompression.Implementations.Compressions.Nintendo.Lz11); case NintendoCompressionMethod.Lz40: return(Kompression.Implementations.Compressions.Nintendo.Lz40); case NintendoCompressionMethod.Lz60: return(Kompression.Implementations.Compressions.Nintendo.Lz60); case NintendoCompressionMethod.Huffman4: return(Kompression.Implementations.Compressions.Nintendo.Huffman4Bit); case NintendoCompressionMethod.Huffman8: return(Kompression.Implementations.Compressions.Nintendo.Huffman8Bit); case NintendoCompressionMethod.Rle: return(Kompression.Implementations.Compressions.Nintendo.Rle); default: throw new NotSupportedException($"Unknown compression method {method}"); } }
private Stream Decompress(Stream input) { using var br = new BinaryReaderX(input, true); input.Position = 5; var magic = br.ReadString(4); if (magic != "F3XT") { _wasCompressed = false; return(input); } _wasCompressed = true; var ms = new MemoryStream(); input.Position = 0; _compMethod = NintendoCompressor.PeekCompressionMethod(input); NintendoCompressor.Decompress(input, ms); ms.Position = 0; return(ms); }
public static void Compress(Stream input, Stream output, NintendoCompressionMethod method) { var configuration = GetConfiguration(method); configuration.Build().Compress(input, output); }
public static bool IsValidCompressionMethod(NintendoCompressionMethod method) { return(Enum.IsDefined(typeof(NintendoCompressionMethod), method)); }