From de4fcb29cffd8fb208c05df76c97526bcbdae048 Mon Sep 17 00:00:00 2001 From: Timofey Solomko Date: Thu, 23 Sep 2021 21:50:35 +0300 Subject: [PATCH] [LZ4] Add an empty implementation of LZ4 --- SWCompression.xcodeproj/project.pbxproj | 12 ++++++++++++ Sources/LZ4/LZ4.swift | 20 ++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 Sources/LZ4/LZ4.swift diff --git a/SWCompression.xcodeproj/project.pbxproj b/SWCompression.xcodeproj/project.pbxproj index 0fabcc7f..991bf8a3 100644 --- a/SWCompression.xcodeproj/project.pbxproj +++ b/SWCompression.xcodeproj/project.pbxproj @@ -221,6 +221,7 @@ E66F36242538726E00076A6E /* test_empty.lzma in Resources */ = {isa = PBXBuildFile; fileRef = E66F36232538726E00076A6E /* test_empty.lzma */; }; E66F362C2538E2B700076A6E /* test_empty.zlib in Resources */ = {isa = PBXBuildFile; fileRef = E66F362B2538E2B700076A6E /* test_empty.zlib */; }; E6791E1826FD001A003852A9 /* DataError.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6791E1726FD001A003852A9 /* DataError.swift */; }; + E6791E1B26FD0094003852A9 /* LZ4.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6791E1A26FD0094003852A9 /* LZ4.swift */; }; E6EDD6A826F7767F00884532 /* test_minor_version_3.7z in Resources */ = {isa = PBXBuildFile; fileRef = E6EDD6A626F7767E00884532 /* test_minor_version_3.7z */; }; E6EDD6A926F7767F00884532 /* test_minor_version_4.7z in Resources */ = {isa = PBXBuildFile; fileRef = E6EDD6A726F7767E00884532 /* test_minor_version_4.7z */; }; E6EDD6AC26F77C0E00884532 /* test_minor_version_2.7z in Resources */ = {isa = PBXBuildFile; fileRef = E6EDD6AB26F77C0E00884532 /* test_minor_version_2.7z */; }; @@ -452,6 +453,7 @@ E66F36232538726E00076A6E /* test_empty.lzma */ = {isa = PBXFileReference; lastKnownFileType = file; path = test_empty.lzma; sourceTree = ""; }; E66F362B2538E2B700076A6E /* test_empty.zlib */ = {isa = PBXFileReference; lastKnownFileType = file; path = test_empty.zlib; sourceTree = ""; }; E6791E1726FD001A003852A9 /* DataError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataError.swift; sourceTree = ""; }; + E6791E1A26FD0094003852A9 /* LZ4.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LZ4.swift; sourceTree = ""; }; E6EDD6A626F7767E00884532 /* test_minor_version_3.7z */ = {isa = PBXFileReference; lastKnownFileType = file; path = test_minor_version_3.7z; sourceTree = ""; }; E6EDD6A726F7767E00884532 /* test_minor_version_4.7z */ = {isa = PBXFileReference; lastKnownFileType = file; path = test_minor_version_4.7z; sourceTree = ""; }; E6EDD6AB26F77C0E00884532 /* test_minor_version_2.7z */ = {isa = PBXFileReference; lastKnownFileType = file; path = test_minor_version_2.7z; sourceTree = ""; }; @@ -590,6 +592,7 @@ 0680B4C31F8814C400C5F253 /* BZip2 */, 0680B4C41F8814EB00C5F253 /* LZMA */, 06A1728C1FA5DCF00048A89C /* LZMA2 */, + E6791E1926FD0070003852A9 /* LZ4 */, 0680B4C61F88151400C5F253 /* XZ */, 06C936831F881A0B008BBF0E /* GZip */, 06C936841F881A28008BBF0E /* Zlib */, @@ -917,6 +920,14 @@ path = BZip2; sourceTree = ""; }; + E6791E1926FD0070003852A9 /* LZ4 */ = { + isa = PBXGroup; + children = ( + E6791E1A26FD0094003852A9 /* LZ4.swift */, + ); + path = LZ4; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -1163,6 +1174,7 @@ 06A960561F1E7D0B0078E6D1 /* 7zPackInfo.swift in Sources */, 06DE29B81FB7024C0098A761 /* LittleEndianByteReader+Zip.swift in Sources */, 06BAC5941F8CFF28002443F4 /* ZipEntryInfo.swift in Sources */, + E6791E1B26FD0094003852A9 /* LZ4.swift in Sources */, 0625C49F1FB4B92F00A52C43 /* CompressionMethod+7z.swift in Sources */, 0620F4B31F8E2477001C9B7A /* ContainerEntry.swift in Sources */, 061C06301F0E8A4900832F0C /* ZlibError.swift in Sources */, diff --git a/Sources/LZ4/LZ4.swift b/Sources/LZ4/LZ4.swift new file mode 100644 index 00000000..ee184fff --- /dev/null +++ b/Sources/LZ4/LZ4.swift @@ -0,0 +1,20 @@ +// Copyright (c) 2021 Timofey Solomko +// Licensed under MIT License +// +// See LICENSE for license information + +import Foundation +import BitByteData + +public enum LZ4: DecompressionAlgorithm { + + public static func decompress(data: Data) throws -> Data { + let reader = LittleEndianByteReader(data: data) + // TODO: Switch between frame and block decoding modes? + // TODO: Small/empty data size check. + guard reader.uint32() == 0x184D2204 + else { throw DataError.corrupted } + fatalError("Not implemented yet") + } + +}