From 2a7c24882b493474005e238333a429b8b1f4fe5c Mon Sep 17 00:00:00 2001 From: Timofey Solomko Date: Wed, 31 May 2017 23:22:51 +0300 Subject: [PATCH] Preparations for 3.0.0. --- .jazzy.yaml | 4 +- CHANGELOG.md | 41 +-- SWCompression.podspec | 2 +- Sources/Service/Info-iOS.plist | 2 +- Sources/Service/Info-tvOS.plist | 2 +- Sources/Service/Info-watchOS.plist | 2 +- Sources/Service/Info.plist | 2 +- docs/Classes.html | 58 ++-- docs/Classes/BZip2.html | 26 +- docs/Classes/Deflate.html | 63 ++-- docs/Classes/GzipArchive.html | 130 ++++++-- docs/Classes/LZMA.html | 26 +- docs/Classes/LZMA2.html | 26 +- docs/Classes/TarContainer.html | 52 +++- docs/Classes/TarEntry.html | 266 ++++++++-------- docs/Classes/TarEntry/EntryType.html | 142 +++++++-- docs/Classes/XZArchive.html | 33 +- docs/Classes/ZipContainer.html | 39 +-- docs/Classes/ZipEntry.html | 38 +-- docs/Classes/ZlibArchive.html | 40 +-- docs/Enums.html | 150 ++------- docs/Enums/BZip2Error.html | 55 ++-- docs/Enums/DeflateError.html | 27 +- docs/Enums/GzipError.html | 78 +++-- docs/Enums/LZMA2Error.html | 34 +-- docs/Enums/LZMAError.html | 71 +++-- docs/Enums/TarError.html | 74 +++-- docs/Enums/XZError.html | 72 ++--- docs/Enums/ZipError.html | 68 ++--- docs/Enums/ZlibError.html | 37 +-- docs/Protocols.html | 34 ++- docs/Protocols/Archive.html | 16 +- docs/Protocols/Container.html | 28 +- docs/Protocols/ContainerEntry.html | 58 +++- docs/Protocols/DecompressionAlgorithm.html | 16 +- docs/Structs.html | 10 +- docs/Structs/GzipHeader.html | 94 ++++-- .../Structs/GzipHeader/CompressionMethod.html | 6 +- docs/Structs/GzipHeader/FileSystemType.html | 25 +- docs/Structs/ZlibHeader.html | 44 +-- docs/Structs/ZlibHeader/CompressionLevel.html | 12 +- .../Structs/ZlibHeader/CompressionMethod.html | 4 +- docs/badge.svg | 2 +- .../Contents/Resources/Documents/Classes.html | 58 ++-- .../Resources/Documents/Classes/BZip2.html | 26 +- .../Resources/Documents/Classes/Deflate.html | 63 ++-- .../Documents/Classes/GzipArchive.html | 130 ++++++-- .../Resources/Documents/Classes/LZMA.html | 26 +- .../Resources/Documents/Classes/LZMA2.html | 26 +- .../Documents/Classes/TarContainer.html | 52 +++- .../Resources/Documents/Classes/TarEntry.html | 266 ++++++++-------- .../Documents/Classes/TarEntry/EntryType.html | 142 +++++++-- .../Documents/Classes/XZArchive.html | 33 +- .../Documents/Classes/ZipContainer.html | 39 +-- .../Resources/Documents/Classes/ZipEntry.html | 38 +-- .../Documents/Classes/ZlibArchive.html | 40 +-- .../Contents/Resources/Documents/Enums.html | 150 ++------- .../Resources/Documents/Enums/BZip2Error.html | 55 ++-- .../Documents/Enums/DeflateError.html | 27 +- .../Resources/Documents/Enums/GzipError.html | 78 +++-- .../Resources/Documents/Enums/LZMA2Error.html | 34 +-- .../Resources/Documents/Enums/LZMAError.html | 71 +++-- .../Resources/Documents/Enums/TarError.html | 74 +++-- .../Resources/Documents/Enums/XZError.html | 72 ++--- .../Resources/Documents/Enums/ZipError.html | 68 ++--- .../Resources/Documents/Enums/ZlibError.html | 37 +-- .../Resources/Documents/Protocols.html | 34 ++- .../Documents/Protocols/Archive.html | 16 +- .../Documents/Protocols/Container.html | 28 +- .../Documents/Protocols/ContainerEntry.html | 58 +++- .../Protocols/DecompressionAlgorithm.html | 16 +- .../Contents/Resources/Documents/Structs.html | 10 +- .../Documents/Structs/GzipHeader.html | 94 ++++-- .../Structs/GzipHeader/CompressionMethod.html | 6 +- .../Structs/GzipHeader/FileSystemType.html | 25 +- .../Documents/Structs/ZlibHeader.html | 44 +-- .../Structs/ZlibHeader/CompressionLevel.html | 12 +- .../Structs/ZlibHeader/CompressionMethod.html | 4 +- .../Contents/Resources/Documents/index.html | 43 ++- .../Contents/Resources/Documents/search.json | 2 +- .../Contents/Resources/docSet.dsidx | Bin 57344 -> 57344 bytes docs/docsets/SWCompression.tgz | Bin 104350 -> 104827 bytes docs/index.html | 43 ++- docs/search.json | 2 +- docs/undocumented.json | 288 +----------------- 85 files changed, 2280 insertions(+), 2059 deletions(-) diff --git a/.jazzy.yaml b/.jazzy.yaml index f48e98ac..36362ae1 100644 --- a/.jazzy.yaml +++ b/.jazzy.yaml @@ -3,9 +3,9 @@ clean: true exclude: Tests/ author: Timofey Solomko module: SWCompression -module_version: 3.0.0-test2 +module_version: 3.0.0 copyright: '© 2017 Timofey Solomko' readme: README.md github_url: https://github.com/tsolomko/SWCompression -github_file_prefix: https://github.com/tsolomko/SWCompression/tree/v3.0.0-test2 +github_file_prefix: https://github.com/tsolomko/SWCompression/tree/v3.0.0 theme: fullwidth diff --git a/CHANGELOG.md b/CHANGELOG.md index 60c8c480..10a9cd46 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,24 +1,29 @@ # Changelog v3.0.0 ---------------- -#### test2 -- Added support for TAR containers. - - Various standards are supported (pre-POSIX, POSIX-1988, pax). - - Added subspec for TAR features. -- Added Container protocol. - - Reworked ZipContainer to conform to new protocol. -- All Errors cases renamed to conform Swift naming convetions (lowerCamelCase). -- Removed LZMAOutWindow. -- Test results combined into single document. -- Reduced tests sizes. -- Included 2.4.1 and 2.4.2 changes. - -#### test1 -- BZip2 decompression now checks CRC32. -- GZipHeader.modificationTime is now Optional. -- Enabled support for bzip2 and lzma compressed files in zip containers. - - In CocoaPods configurations availability of such support depends on - the presence of corresponding podspecs. +- All errors have been renamed, so they conform to Swift Naming Conventions (lowerCamelCase). +- Added `Container` and `ContainerEntry` protocols. +- Most methods have their arguments' labels renamed to make usage shorter. +- Most documentation have been edited to improve readability. +- Multiple files with results of performance tests replaced with consolidated one. +- Enabled support for LZMA and BZip2 compression algorithms. +- `ZipEntry` now conforms to `ContainerEntry` protocol. +- This also means that entry's data is now provided through `ZipEntry.data()` instead of `ZipContainer`'s function. +- Improved detection of directories if ZIP container was created on MS-DOS or UNIX-like systems. +- `ZipError.wrongCRC32` now contains entry's data as associated value. +- Fixed a problem where Zip64 sized fields weren't used during processing of Data Descriptor. +- Added some measures to prevent crashes when it is impossible to read ZIP text fields (file name or comment) in UTF-8 encoding +- Added support for TAR containers in various format versions. +- Now `GzipArchive.unarchive` function unarchives only first 'member' of archive. +- Added support for GZip archive's option in `archive` function. +- `GzipHeader.modificationTime` is now Optional. +- `GzipHeader.originalFileName` renamed to `GzipHeader.fileName`. +- Added `GzipHeader.isTextFile` property which corresponds to same named flag in archive's header. +- Now `XZArchive.unarchive` function unarchives only first stream of archive. +- Check for xz archive's footer's 'magic' bytes is now performed at the beginning of processing. +- XZ header's checksum is now checked before parsing reserved flags. +- BZip2 now performs CRC32 check for decompressed data. +- Removed internal `LZMAOutWindow` auxiliary class. v2.4.3 ---------------- diff --git a/SWCompression.podspec b/SWCompression.podspec index 707a68c2..bfbcb622 100644 --- a/SWCompression.podspec +++ b/SWCompression.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = "SWCompression" - s.version = "3.0.0-test2" + s.version = "3.0.0" s.summary = "Framework with implementations in Swift of different (de)compression algorithms" s.description = <<-DESC diff --git a/Sources/Service/Info-iOS.plist b/Sources/Service/Info-iOS.plist index 5e0b9206..ee73227e 100644 --- a/Sources/Service/Info-iOS.plist +++ b/Sources/Service/Info-iOS.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.0.0-dev + 3.0.0 CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass diff --git a/Sources/Service/Info-tvOS.plist b/Sources/Service/Info-tvOS.plist index 5e0b9206..ee73227e 100644 --- a/Sources/Service/Info-tvOS.plist +++ b/Sources/Service/Info-tvOS.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.0.0-dev + 3.0.0 CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass diff --git a/Sources/Service/Info-watchOS.plist b/Sources/Service/Info-watchOS.plist index 5e0b9206..ee73227e 100644 --- a/Sources/Service/Info-watchOS.plist +++ b/Sources/Service/Info-watchOS.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.0.0-dev + 3.0.0 CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass diff --git a/Sources/Service/Info.plist b/Sources/Service/Info.plist index f8316a6b..11286145 100644 --- a/Sources/Service/Info.plist +++ b/Sources/Service/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.0.0-dev + 3.0.0 CFBundleVersion $(CURRENT_PROJECT_VERSION) NSHumanReadableCopyright diff --git a/docs/Classes.html b/docs/Classes.html index 7fa3b6d8..e2240f7e 100644 --- a/docs/Classes.html +++ b/docs/Classes.html @@ -22,7 +22,7 @@ SWCompression Docs - (75% documented) + (100% documented)

@@ -191,7 +191,7 @@

-

Provides function to decompress data, which were compressed with LZMA2

+

Provides decompression function for LZMA2 algorithm.

See more
@@ -199,12 +199,12 @@

Declaration

Swift

-
public final class LZMA2: DecompressionAlgorithm
+
public class LZMA2: DecompressionAlgorithm
@@ -226,7 +226,7 @@
-

Provides unarchive function for GZip archives.

+

Provides unarchive and archive functions for GZip archives.

See more
@@ -234,12 +234,12 @@

Declaration

Swift

-
public final class GzipArchive: Archive
+
public class GzipArchive: Archive
@@ -261,7 +261,7 @@
-

Represents either a file or directory entry inside ZIP archive.

+

Represents either a file or directory entry in ZIP container.

See more
@@ -274,7 +274,7 @@
@@ -292,7 +292,7 @@
-

Provides function which opens ZIP archives (containers).

+

Provides open function for ZIP containers.

See more
@@ -305,7 +305,7 @@
@@ -327,7 +327,7 @@
-

Provides function to decompress data, which were compressed with LZMA

+

Provides decompression function for LZMA algorithm.

See more
@@ -335,12 +335,12 @@

Declaration

Swift

-
public final class LZMA: DecompressionAlgorithm
+
public class LZMA: DecompressionAlgorithm
@@ -362,7 +362,7 @@
-

Provides unarchive function for Zlib archives.

+

Provides unarchive and archive functions for Zlib archives.

See more
@@ -370,12 +370,12 @@

Declaration

Swift

-
public final class ZlibArchive: Archive
+
public class ZlibArchive: Archive
@@ -397,7 +397,7 @@
-

Provides function to decompress data, which were compressed with DEFLATE.

+

Provides compression and decompression functions for Deflate algorithm.

See more
@@ -405,12 +405,12 @@

Declaration

Swift

-
public final class Deflate: DecompressionAlgorithm
+
public class Deflate: DecompressionAlgorithm
@@ -432,7 +432,7 @@
-

Provides function to decompress data, which were compressed using BZip2.

+

Provides decompression function for BZip2 algorithm.

See more
@@ -440,12 +440,12 @@

Declaration

Swift

-
public final class BZip2: DecompressionAlgorithm
+
public class BZip2: DecompressionAlgorithm
@@ -467,7 +467,7 @@
-

Represents either a file or directory entry inside TAR archive.

+

Represents either a file or directory entry in TAR container.

See more
@@ -480,7 +480,7 @@
@@ -498,7 +498,7 @@
-

Provides function which opens TAR archives (containers).

+

Provides open function for TAR containers.

See more
@@ -511,7 +511,7 @@
@@ -541,12 +541,12 @@

Declaration

Swift

-
public final class XZArchive: Archive
+
public class XZArchive: Archive
- Show on GitHub + Show on GitHub
diff --git a/docs/Classes/BZip2.html b/docs/Classes/BZip2.html index 391621e7..4d7dd421 100644 --- a/docs/Classes/BZip2.html +++ b/docs/Classes/BZip2.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

@@ -172,11 +172,11 @@

BZip2

-
public final class BZip2: DecompressionAlgorithm
+
public class BZip2: DecompressionAlgorithm
-

Provides function to decompress data, which were compressed using BZip2.

+

Provides decompression function for BZip2 algorithm.

@@ -188,9 +188,9 @@
  • - - - decompress(compressedData:) + + + decompress(data:)
    @@ -198,13 +198,13 @@
    -

    Decompresses compressedData with BZip2 algortihm.

    +

    Decompresses data using BZip2 algortihm.

    -

    If data passed is not actually compressed with BZip2, BZip2Error will be thrown.

    +

    If data is not actually compressed with BZip2, BZip2Error will be thrown.

    Throws

    -

    BZip2Error if unexpected byte (bit) sequence was encountered in compressedData. -It may indicate that either the data is damaged or it might not be compressed with BZip2 at all.

    +

    BZip2Error if unexpected byte (bit) sequence was encountered in data. +It may indicate that either data is damaged or it might not be compressed with BZip2 at all.

    @@ -213,7 +213,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Declaration

    Swift

    -
    public static func decompress(compressedData data: Data) throws -> Data
    +
    public static func decompress(data: Data) throws -> Data
    @@ -224,7 +224,7 @@ It may indicate that either the data is damaged or it might not be compressed wi - compressedData + data @@ -241,7 +241,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Decompressed data.

    diff --git a/docs/Classes/Deflate.html b/docs/Classes/Deflate.html index 48b672aa..50211aec 100644 --- a/docs/Classes/Deflate.html +++ b/docs/Classes/Deflate.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -172,11 +172,11 @@

    Deflate

    -
    public final class Deflate: DecompressionAlgorithm
    +
    public class Deflate: DecompressionAlgorithm
    -

    Provides function to decompress data, which were compressed with DEFLATE.

    +

    Provides compression and decompression functions for Deflate algorithm.

    @@ -188,9 +188,9 @@
  • - - - decompress(compressedData:) + + + decompress(data:)
    @@ -198,13 +198,18 @@
    -

    Decompresses compressedData with DEFLATE algortihm.

    +

    Decompresses data using Deflate algortihm.

    -

    If data passed is not actually compressed with DEFLATE, DeflateError will be thrown.

    +

    If data is not actually compressed with Deflate, DeflateError will be thrown.

    +
    +

    Note

    +

    This function is specification compliant.

    + +

    Throws

    -

    DeflateError if unexpected byte (bit) sequence was encountered in compressedData. -It may indicate that either the data is damaged or it might not be compressed with DEFLATE at all.

    +

    DeflateError if unexpected byte (bit) sequence was encountered in data. +It may indicate that either data is damaged or it might not be compressed with Deflate at all.

    @@ -213,7 +218,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Declaration

    Swift

    -
    public static func decompress(compressedData data: Data) throws -> Data
    +
    public static func decompress(data: Data) throws -> Data
    @@ -224,12 +229,12 @@ It may indicate that either the data is damaged or it might not be compressed wi - compressedData + data
    -

    Data compressed with DEFLATE.

    +

    Data compressed with Deflate.

    @@ -241,7 +246,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Decompressed data.

    @@ -259,15 +264,16 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Compresses data with DEFLATE algortihm.

    +

    Compresses data with Deflate algortihm.

    If during compression something goes wrong DeflateError will be thrown.

    Note

    - Currently, SWCompression creates only one block for all data +

    Currently, SWCompression creates only one block for all data and the block can either be uncompressed or compressed with static Huffman encoding. -Uncompressed block is created if amount of data provided is less than 3 bytes and -static Huffman is used in all other cases. +Choice of one block type or the other depends on bytes’ statistics of data. +However, if data size is greater than 65535 (the maximum value stored in 2 bytes), +then static Huffman block will be created.

    @@ -280,8 +286,27 @@ static Huffman is used in all other cases.
    +
    +

    Parameters

    + + + + + + + +
    + + data + + +
    +

    Data to compress.

    +
    +
    +
    diff --git a/docs/Classes/GzipArchive.html b/docs/Classes/GzipArchive.html index dd78db7f..ff5cc651 100644 --- a/docs/Classes/GzipArchive.html +++ b/docs/Classes/GzipArchive.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -172,11 +172,11 @@

    GzipArchive

    -
    public final class GzipArchive: Archive
    +
    public class GzipArchive: Archive
    -

    Provides unarchive function for GZip archives.

    +

    Provides unarchive and archive functions for GZip archives.

    @@ -188,9 +188,9 @@
  • - - - unarchive(archiveData:) + + + unarchive(archive:)
    @@ -198,11 +198,11 @@
    -

    Unarchives gzip archive stored in archiveData.

    +

    Unarchives GZip archive.

    -

    If data passed is not actually a gzip archive, GzipError will be thrown.

    +

    If data passed is not actually a GZip archive, GzipError will be thrown.

    -

    If data inside the archive is not actually compressed with DEFLATE algorithm, DeflateError will be thrown.

    +

    If data in archive is not actually compressed with Deflate algorithm, DeflateError will be thrown.

    Note

    This function is specification compliant.

    @@ -210,8 +210,9 @@

    Throws

    -

    DeflateError or GzipError depending on the type of inconsistency in data. -It may indicate that either the data is damaged or it might not be compressed with gzip or DEFLATE at all.

    +

    DeflateError or GzipError depending on the type of the problem. +It may indicate that either archive is damaged or +it might not be archived with GZip or compressed with Deflate at all.

    @@ -220,7 +221,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Declaration

    Swift

    -
    public static func unarchive(archiveData data: Data) throws -> Data
    +
    public static func unarchive(archive data: Data) throws -> Data
    @@ -231,12 +232,12 @@ It may indicate that either the data is damaged or it might not be compressed wi - archiveData + archive
    -

    Data compressed with gzip.

    +

    Data archived with GZip.

    @@ -248,7 +249,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Unarchived data.

    @@ -256,9 +257,9 @@ It may indicate that either the data is damaged or it might not be compressed wi
  • - - - archive(data:) + + + archive(data:comment:fileName:writeHeaderCRC:isTextFile:osType:modificationTime:)
    @@ -266,12 +267,13 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Archives data into GZip archive. Data will be also compressed with DEFLTATE algorithm. -Fields in the header of the resulting archive will be set to default values -(i.e. no mtime, no flags, no file name, unknown OS type). -It will be also specified that the compressor used slowest DEFLATE algorithm.

    +

    Archives data into GZip archive, using various specified options. +Data will be also compressed with Deflate algorithm. +It will be also specified in archive’s header that the compressor used the slowest Deflate algorithm.

    -

    If during compression something goes wrong DeflateError will be thrown.

    +

    If during compression something goes wrong DeflateError will be thrown. +If either fileName or comment cannot be encoded with ISO Latin-1 encoding, +then GzipError.cannotEncodeISOLatin1 will be thrown.

    Note

    This function is specification compliant.

    @@ -279,7 +281,7 @@ It will be also specified that the compressor used slowest DEFLATE algorithm.

    Throws

    -

    DeflateError if an error was encountered during compression.

    +

    DeflateError or GzipError.cannotEncodeISOLatin1 depending on the type of of the problem.

    @@ -288,7 +290,9 @@ It will be also specified that the compressor used slowest DEFLATE algorithm.

    Declaration

    Swift

    -
    public static func archive(data: Data) throws -> Data
    +
    public static func archive(data: Data, comment: String? = nil, fileName: String? = nil,
    +                               writeHeaderCRC: Bool = false, isTextFile: Bool = false,
    +                               osType: GzipHeader.FileSystemType? = nil, modificationTime: Date? = nil) throws -> Data
    @@ -308,15 +312,87 @@ It will be also specified that the compressor used slowest DEFLATE algorithm.

    + + + + comment + + + +
    +

    Additional comment, which will be stored as a separate field in archive.

    +
    + + + + + + fileName + + + +
    +

    Name of the file which will be archived.

    +
    + + + + + + writeHeaderCRC + + + +
    +

    Set to true, if you want to store consistency check for archive’s header.

    +
    + + + + + + isTextFile + + + +
    +

    Set to true, if the file which will be archived is text file or ASCII-file.

    +
    + + + + + + osType + + + +
    +

    Type of the system on which this archive will be created.

    +
    + + + + + + modificationTime + + + +
    +

    Last time the file was modified.

    +
    + +

    Return Value

    -

    Data object with resulting archive.

    +

    Resulting archive’s data.

    diff --git a/docs/Classes/LZMA.html b/docs/Classes/LZMA.html index 7810dc32..ef6a5d44 100644 --- a/docs/Classes/LZMA.html +++ b/docs/Classes/LZMA.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -172,11 +172,11 @@

    LZMA

    -
    public final class LZMA: DecompressionAlgorithm
    +
    public class LZMA: DecompressionAlgorithm
    -

    Provides function to decompress data, which were compressed with LZMA

    +

    Provides decompression function for LZMA algorithm.

    @@ -188,9 +188,9 @@
  • - - - decompress(compressedData:) + + + decompress(data:)
    @@ -198,13 +198,13 @@
    -

    Decompresses compressedData with LZMA algortihm.

    +

    Decompresses data using LZMA algortihm.

    -

    If data passed is not actually compressed with LZMA, LZMAError will be thrown.

    +

    If data is not actually compressed with LZMA, LZMAError will be thrown.

    Throws

    -

    LZMAError if unexpected byte (bit) sequence was encountered in compressedData. -It may indicate that either the data is damaged or it might not be compressed with LZMA at all.

    +

    LZMAError if unexpected byte (bit) sequence was encountered in data. +It may indicate that either data is damaged or it might not be compressed with LZMA at all.

    @@ -213,7 +213,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Declaration

    Swift

    -
    public static func decompress(compressedData data: Data) throws -> Data
    +
    public static func decompress(data: Data) throws -> Data
    @@ -224,7 +224,7 @@ It may indicate that either the data is damaged or it might not be compressed wi - compressedData + data @@ -241,7 +241,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Decompressed data.

    diff --git a/docs/Classes/LZMA2.html b/docs/Classes/LZMA2.html index 644475ed..3b9cce92 100644 --- a/docs/Classes/LZMA2.html +++ b/docs/Classes/LZMA2.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -172,11 +172,11 @@

    LZMA2

    -
    public final class LZMA2: DecompressionAlgorithm
    +
    public class LZMA2: DecompressionAlgorithm
    -

    Provides function to decompress data, which were compressed with LZMA2

    +

    Provides decompression function for LZMA2 algorithm.

    @@ -188,9 +188,9 @@
  • - - - decompress(compressedData:) + + + decompress(data:)
    @@ -198,13 +198,13 @@
    -

    Decompresses compressedData with LZMA2 algortihm. LZMA2 is a modification of LZMA.

    +

    Decompresses data using LZMA2 algortihm.

    -

    If data passed is not actually compressed with LZMA2, LZMA2Error or LZMAError will be thrown.

    +

    If data is not actually compressed with LZMA2, LZMAError or LZMA2Error will be thrown.

    Throws

    -

    LZMA2Error or LZMAError if unexpected byte (bit) sequence was encountered in compressedData. -It may indicate that either the data is damaged or it might not be compressed with LZMA2 at all.

    +

    LZMAError or LZMA2Error if unexpected byte (bit) sequence was encountered in data. +It may indicate that either data is damaged or it might not be compressed with LZMA2 at all.

    @@ -213,7 +213,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Declaration

    Swift

    -
    public static func decompress(compressedData data: Data) throws -> Data
    +
    public static func decompress(data: Data) throws -> Data
    @@ -224,7 +224,7 @@ It may indicate that either the data is damaged or it might not be compressed wi - compressedData + data @@ -241,7 +241,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Decompressed data.

    diff --git a/docs/Classes/TarContainer.html b/docs/Classes/TarContainer.html index bbf3179b..32af50ed 100644 --- a/docs/Classes/TarContainer.html +++ b/docs/Classes/TarContainer.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,7 +176,7 @@ -

    Provides function which opens TAR archives (containers).

    +

    Provides open function for TAR containers.

    @@ -188,9 +188,9 @@
  • - - - open(containerData:) + + + open(container:)
    @@ -198,19 +198,55 @@
    -

    Undocumented

    +

    Processes TAR container and returns an array of ContainerEntries (which are actually TarEntries).

    +
    +

    Important

    +

    The order of entries is defined by TAR container and, +particularly, by a creator of a given TAR container. +It is likely that directories will be encountered earlier than files stored in those directories, +but one SHOULD NOT rely on any particular order.

    + +
    +
    +

    Throws

    +

    TarError, which may indicate that either container is damaged or it might not be TAR container at all.

    + +

    Declaration

    Swift

    -
    public class TarContainer: Container
    +
    public static func open(container data: Data) throws -> [ContainerEntry]
    +
    +

    Parameters

    + + + + + + + +
    + + container + + +
    +

    TAR container’s data.

    +
    +
    +
    +
    +

    Return Value

    +

    Array of TarEntry as an array of ContainerEntry.

    +
    diff --git a/docs/Classes/TarEntry.html b/docs/Classes/TarEntry.html index 89fdeeba..5977bab6 100644 --- a/docs/Classes/TarEntry.html +++ b/docs/Classes/TarEntry.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,7 +176,7 @@ -

    Represents either a file or directory entry inside TAR archive.

    +

    Represents either a file or directory entry in TAR container.

    @@ -198,7 +198,7 @@
    -

    Undocumented

    +

    Represents a type of an entry.

    See more
    @@ -206,12 +206,12 @@

    Declaration

    Swift

    -
    public class TarEntry: ContainerEntry
    +
    public enum EntryType: String
    @@ -241,7 +241,7 @@ @@ -259,109 +259,19 @@
    -

    Undocumented

    +

    True, if an entry is a directory.

    Declaration

    Swift

    -
    public class TarEntry: ContainerEntry
    +
    public var isDirectory: Bool
    -
    - -
  • -
  • -
    - - - - mode - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class TarEntry: ContainerEntry
    - -
    -
    - -
    -
    -
  • -
  • -
    - - - - ownerID - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class TarEntry: ContainerEntry
    - -
    -
    - -
    -
    -
  • -
  • -
    - - - - groupID - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class TarEntry: ContainerEntry
    - -
    -
    -
    @@ -379,19 +289,109 @@
    -

    Undocumented

    +

    Size of the data associated with the entry.

    Declaration

    Swift

    -
    public class TarEntry: ContainerEntry
    +
    public private(set) var size: Int
    +
    + +
  • +
  • +
    + + + + mode + +
    +
    +
    +
    +
    +
    +

    File mode.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let mode: Int?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ownerID + +
    +
    +
    +
    +
    +
    +

    Owner’s ID.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public private(set) var ownerID: Int?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + groupID + +
    +
    +
    +
    +
    +
    +

    Owner’s group ID.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public private(set) var groupID: Int?
    + +
    +
    +
    @@ -409,19 +409,19 @@
    -

    Undocumented

    +

    The most recent modification time of the original file or directory.

    Declaration

    Swift

    -
    public class TarEntry: ContainerEntry
    +
    public private(set) var modificationTime: Date
    @@ -439,19 +439,19 @@
    -

    Undocumented

    +

    Type of entry.

    Declaration

    Swift

    -
    public class TarEntry: ContainerEntry
    +
    public let type: EntryType
    @@ -469,19 +469,19 @@
    -

    Undocumented

    +

    Owner’s user name.

    Declaration

    Swift

    -
    public class TarEntry: ContainerEntry
    +
    public private(set) var ownerUserName: String?
    @@ -499,19 +499,19 @@
    -

    Undocumented

    +

    Owner’s group name.

    Declaration

    Swift

    -
    public class TarEntry: ContainerEntry
    +
    public private(set) var ownerGroupName: String?
    @@ -529,19 +529,19 @@
    -

    Undocumented

    +

    The most recent access time of the original file or directory (PAX only).

    Declaration

    Swift

    -
    public class TarEntry: ContainerEntry
    +
    public private(set) var accessTime: Date?
    @@ -559,19 +559,19 @@
    -

    Undocumented

    +

    Name of the character set used to encode entry’s data (PAX only).

    Declaration

    Swift

    -
    public class TarEntry: ContainerEntry
    +
    public private(set) var charset: String?
    @@ -589,19 +589,19 @@
    -

    Undocumented

    +

    Comment associated with the entry (PAX only).

    Declaration

    Swift

    -
    public class TarEntry: ContainerEntry
    +
    public private(set) var comment: String?
    @@ -619,19 +619,19 @@
    -

    Undocumented

    +

    Path to linked entry (PAX only).

    Declaration

    Swift

    -
    public class TarEntry: ContainerEntry
    +
    public private(set) var linkPath: String?
    @@ -649,19 +649,19 @@
    -

    Undocumented

    +

    Other entries from PAX extended headers.

    Declaration

    Swift

    -
    public class TarEntry: ContainerEntry
    +
    public private(set) var unknownExtendedHeaderEntries: [String: String] = [:]
    @@ -680,12 +680,6 @@

    Returns data associated with this entry.

    -
    -

    Note

    - Returned Data object with the size of 0 can either indicate that the entry is an empty file -or it is a directory. - -
    @@ -697,7 +691,7 @@ or it is a directory.
    diff --git a/docs/Classes/TarEntry/EntryType.html b/docs/Classes/TarEntry/EntryType.html index 5a40df63..cfc0eb1e 100644 --- a/docs/Classes/TarEntry/EntryType.html +++ b/docs/Classes/TarEntry/EntryType.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -170,7 +170,13 @@

    EntryType

    -

    Undocumented

    +
    +
    +
    public enum EntryType: String
    + +
    +
    +

    Represents a type of an entry.

    @@ -192,11 +198,19 @@
    -

    Undocumented

    +

    Normal file.

    +
    +

    Declaration

    +
    +

    Swift

    +
    case normal = "0"
    + +
    +
    @@ -218,11 +232,19 @@
    -

    Undocumented

    +

    Hard linked entry.

    +
    +

    Declaration

    +
    +

    Swift

    +
    case hardLink = "1"
    + +
    +
    @@ -244,11 +266,19 @@
    -

    Undocumented

    +

    Symbolically linked entry.

    +
    +

    Declaration

    +
    +

    Swift

    +
    case symbolicLink = "2"
    + +
    +
    @@ -270,11 +300,19 @@
    -

    Undocumented

    +

    Character special file.

    +
    +

    Declaration

    +
    +

    Swift

    +
    case characterSpecial = "3"
    + +
    +
    @@ -296,11 +334,19 @@
    -

    Undocumented

    +

    Block special file.

    +
    +

    Declaration

    +
    +

    Swift

    +
    case blockSpecial = "4"
    + +
    +
    @@ -322,11 +368,19 @@
    -

    Undocumented

    +

    Directory.

    +
    +

    Declaration

    +
    +

    Swift

    +
    case directory = "5"
    + +
    +
    @@ -348,11 +402,19 @@
    -

    Undocumented

    +

    FIFO special file.

    +
    +

    Declaration

    +
    +

    Swift

    +
    case fifo = "6"
    + +
    +
    @@ -374,11 +436,19 @@
    -

    Undocumented

    +

    Contiguous file.

    +
    +

    Declaration

    +
    +

    Swift

    +
    case contiguous = "7"
    + +
    +
    @@ -400,11 +470,19 @@
    -

    Undocumented

    +

    PAX global extended header. (Should not be encountered separately).

    +
    +

    Declaration

    +
    +

    Swift

    +
    case globalExtendedHeader = "g"
    + +
    +
    @@ -426,11 +504,19 @@
    -

    Undocumented

    +

    PAX local extended header. (Should not be encountered separately).

    +
    +

    Declaration

    +
    +

    Swift

    +
    case localExtendedHeader = "x"
    + +
    +
    @@ -452,11 +538,19 @@
    -

    Undocumented

    +

    Either unknown type, vendor specific or reserved value.

    +
    +

    Declaration

    +
    +

    Swift

    +
    case vendorUnknownOrReserved
    + +
    +
    diff --git a/docs/Classes/XZArchive.html b/docs/Classes/XZArchive.html index 34de8365..6e80d6a7 100644 --- a/docs/Classes/XZArchive.html +++ b/docs/Classes/XZArchive.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -172,7 +172,7 @@

    XZArchive

    -
    public final class XZArchive: Archive
    +
    public class XZArchive: Archive
    @@ -188,9 +188,9 @@
  • - - - unarchive(archiveData:) + + + unarchive(archive:)
    @@ -198,17 +198,18 @@
    -

    Unarchives xz archive stored in archiveData.

    +

    Unarchives XZ archive.

    -

    If data passed is not actually a xz archive, XZError will be thrown. -If filters other than LZMA2 are used in archive then XZError.wrongFilterID will be thrown.

    +

    If data passed is not actually XZ archive, XZError will be thrown. +Particularly, if filters other than LZMA2 are used in archive, +then XZError.wrongFilter will be thrown.

    -

    If data inside the archive is not actually compressed with LZMA2, -LZMAError or LZMA2Error will be thrown.

    +

    If an error happens during LZMA2 decompression, +then LZMAError or LZMA2Error will be thrown.

    Throws

    -

    LZMAError, LZMA2Error or XZError depending on the type of inconsistency in data. -It may indicate that either the data is damaged or it might not be compressed with xz or LZMA(2) at all.

    +

    LZMAError, LZMA2Error or XZError depending on the type of the problem. +It may indicate that either the archive is damaged or it might not be compressed with XZ or LZMA(2) at all.

    @@ -217,7 +218,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Declaration

    Swift

    -
    public static func unarchive(archiveData data: Data) throws -> Data
    +
    public static func unarchive(archive data: Data) throws -> Data
    @@ -228,12 +229,12 @@ It may indicate that either the data is damaged or it might not be compressed wi - archiveData + archive
    -

    Data compressed with xz.

    +

    Data archived using XZ format.

    @@ -245,7 +246,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Unarchived data.

    diff --git a/docs/Classes/ZipContainer.html b/docs/Classes/ZipContainer.html index cd31f8ff..0fa4556b 100644 --- a/docs/Classes/ZipContainer.html +++ b/docs/Classes/ZipContainer.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,7 +176,7 @@ -

    Provides function which opens ZIP archives (containers).

    +

    Provides open function for ZIP containers.

    @@ -188,9 +188,9 @@
  • - - - open(containerData:) + + + open(container:)
    @@ -198,27 +198,20 @@
    -

    Processes ZIP archive (container) and returns an array of ContainerEntries (which are actually ZipEntries). -First member of a tuple is entry’s name, second member is entry’s data.

    +

    Processes ZIP container and returns an array of ContainerEntries (which are actually ZipEntries).

    Important

    -

    The order of entries is defined by ZIP archive and, particularly, creator of given ZIP container. +

    The order of entries is defined by ZIP container and, +particularly, by a creator of a given ZIP container. It is likely that directories will be encountered earlier than files stored in those directories, -but one SHOULD NOT assume that this is the case.

    - -
    -
    -

    Note

    -

    Currently, there is no universal (platform and file system independent) method to determine if entry is a directory. -One can check this by looking at the size of entry’s data (it should be 0 for directory) AND -the last character of entry’s name (it should be ‘/’). If all of these is true then entry is likely to be a directory.

    +but one SHOULD NOT rely on any particular order.

    Throws

    ZipError or any other error associated with compression type, -depending on the type of inconsistency in data. -It may indicate that either the container is damaged or it might not be ZIP container at all.

    +depending on the type of the problem. +It may indicate that either container is damaged or it might not be ZIP container at all.

    @@ -227,7 +220,7 @@ It may indicate that either the container is damaged or it might not be ZIP cont

    Declaration

    Swift

    -
    public static func open(containerData: Data) throws -> [ContainerEntry]
    +
    public static func open(container data: Data) throws -> [ContainerEntry]
    @@ -238,12 +231,12 @@ It may indicate that either the container is damaged or it might not be ZIP cont - containerData + container
    -

    Data of ZIP container.

    +

    ZIP container’s data.

    @@ -252,10 +245,10 @@ It may indicate that either the container is damaged or it might not be ZIP cont

    Return Value

    -

    Array of pairs ZipEntries as an array of ContainerEntries.

    +

    Array of ZipEntry as an array of ContainerEntry.

    diff --git a/docs/Classes/ZipEntry.html b/docs/Classes/ZipEntry.html index a0976478..0ec16e22 100644 --- a/docs/Classes/ZipEntry.html +++ b/docs/Classes/ZipEntry.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,7 +176,7 @@ -

    Represents either a file or directory entry inside ZIP archive.

    +

    Represents either a file or directory entry in ZIP container.

    @@ -210,7 +210,7 @@ @@ -240,7 +240,7 @@ @@ -258,7 +258,7 @@
    -

    File or directory attributes related to the file system of archive’s creator.

    +

    File or directory attributes related to the file system of the container’s creator.

    @@ -270,7 +270,7 @@
    @@ -288,19 +288,19 @@
    -

    Undocumented

    +

    Size of the data associated with the entry.

    Declaration

    Swift

    -
    public class ZipEntry: ContainerEntry
    +
    public var size: Int
    @@ -318,8 +318,9 @@
    -

    True, if an entry is likely to be a directory. -Particularly, it is true if size of data is 0 and last character of entry’s name is ‘/’.

    +

    True, if an entry is a directory. +For MS-DOS and UNIX-like container creator’s OS, the result is based on ‘external file attributes’. +Otherwise, it is true if size of data is 0 AND last character of entry’s name is ‘/’.

    @@ -331,7 +332,7 @@ Particularly, it is true if size of data is 0 and last character of entry’
    @@ -350,17 +351,10 @@ Particularly, it is true if size of data is 0 and last character of entry’

    Returns data associated with this entry.

    -
    -

    Note

    -

    Returned Data object with the size of 0 can either indicate that the entry is an empty file -or it is a directory.

    - -

    Throws

    -

    ZipError or any other error associated with compression type, -depending on the type of inconsistency in data. -An error can indicate that the container is damaged.

    + ZipError or any other error associated with compression type, +depending on the type of the problem. An error can indicate that container is damaged.
    @@ -374,7 +368,7 @@ An error can indicate that the container is damaged.

    diff --git a/docs/Classes/ZlibArchive.html b/docs/Classes/ZlibArchive.html index c703621d..f6e07165 100644 --- a/docs/Classes/ZlibArchive.html +++ b/docs/Classes/ZlibArchive.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -172,11 +172,11 @@

    ZlibArchive

    -
    public final class ZlibArchive: Archive
    +
    public class ZlibArchive: Archive
    -

    Provides unarchive function for Zlib archives.

    +

    Provides unarchive and archive functions for Zlib archives.

    @@ -188,9 +188,9 @@
  • - - - unarchive(archiveData:) + + + unarchive(archive:)
    @@ -198,11 +198,11 @@
    -

    Unarchives Zlib archive stored in archiveData.

    +

    Unarchives Zlib archive.

    -

    If data passed is not actually a zlib archive, ZlibError will be thrown.

    +

    If data passed is not actually a Zlib archive, ZlibError will be thrown.

    -

    If data inside the archive is not actually compressed with DEFLATE algorithm, DeflateError will be thrown.

    +

    If data in archive is not actually compressed with Deflate algorithm, DeflateError will be thrown.

    Note

    This function is specification compliant.

    @@ -210,8 +210,9 @@

    Throws

    -

    DeflateError or ZlibError depending on the type of inconsistency in data. -It may indicate that either the data is damaged or it might not be compressed with zlib or DEFLATE at all.

    +

    DeflateError or ZlibError depending on the type of the problem. +It may indicate that either archive is damaged or +it might not be archived with Zlib or compressed with Deflate at all.

    @@ -220,7 +221,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Declaration

    Swift

    -
    public static func unarchive(archiveData data: Data) throws -> Data
    +
    public static func unarchive(archive data: Data) throws -> Data
    @@ -231,12 +232,12 @@ It may indicate that either the data is damaged or it might not be compressed wi - archiveData + archive
    -

    Data compressed with zlib.

    +

    Data archived with Zlib.

    @@ -248,7 +249,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Unarchived data.

    @@ -266,8 +267,9 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Archives data into Zlib archive. Data will be also compressed with DEFLTATE algorithm. -It will be specified in archive’s header that the compressor used slowest DEFLATE algorithm.

    +

    Archives data into Zlib archive. +Data will be also compressed with Deflate algorithm. +It will also be specified in archive’s header that the compressor used the slowest Deflate algorithm.

    If during compression something goes wrong DeflateError will be thrown.

    @@ -311,10 +313,10 @@ It will be specified in archive’s header that the compressor used slowest

    Return Value

    -

    Data object with resulting archive.

    +

    Resulting archive’s data.

    diff --git a/docs/Enums.html b/docs/Enums.html index 6766e027..816aaf55 100644 --- a/docs/Enums.html +++ b/docs/Enums.html @@ -22,7 +22,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -191,16 +191,8 @@

    -

    Error happened during LZMA2 decompression. -It may indicate that either the data is damaged or it might not be compressed with LZMA2 at all.

    - -
      -
    • wrongProperties: reserved bits of LZMA2 properties byte weren’t zero.
    • -
    • wrongDictionarySize: dictionary size was greater than 2^32.
    • -
    • wrongControlByte: unsupported value of LZMA2 packet’s control byte.
    • -
    • wrongReset: unsupported ‘reset’ value of LZMA2 packet’s.
    • -
    • wrongSizes: size of compressed or decompressed data wasn’t the same as specified in LZMA2 packet.
    • -
    +

    Represents an error, which happened during LZMA2 decompression. +It may indicate that either data is damaged or it might not be compressed with LZMA2 at all.

    See more
    @@ -213,7 +205,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -235,19 +227,8 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Error happened during unarchiving gzip archive. -It may indicate that either the data is damaged or it might not be gzip archive at all.

    - -
      -
    • wrongMagic: first two bytes of archive were not 31 and 139.
    • -
    • wrongCompressionMethod: unsupported compression method (not 8 aka Deflate).
    • -
    • wrongFlags: unsupported flags (reserved flags weren’t 0).
    • -
    • wrongHeaderCRC: computed Cyclic Redundancy Check of archive’s header - didn’t match the archive’s value.
    • -
    • wrongCRC: computed Cyclic Redundancy Check of uncompressed data didn’t match the archive’s value. -Associated value contains already decompressed data.
    • -
    • wrongISize: size of uncompressed data modulo 2^32 didn’t match the archive’s value.
    • -
    +

    Represents an error, which happened during processing GZip archive. +It may indicate that either archive is damaged or it might not be GZip archive at all.

    See more
    @@ -260,7 +241,7 @@ Associated value contains already decompressed data.
  • - Show on GitHub + Show on GitHub
    @@ -282,22 +263,8 @@ Associated value contains already decompressed data.
    -

    Error happened during processing ZIP archive (container). -It may indicate that either the data is damaged or it might not be ZIP archive (container) at all.

    - -
      -
    • notFoundCentralDirectoryEnd: end of Central Directoty record wasn’t found.
    • -
    • wrongSignature: unsupported signature of one of ZIP container’s structures.
    • -
    • wrongSize: incorrect compressed or uncompressed size of a ZIP container’s entry’s data.
    • -
    • wrongVersion: unsupported number of version needed to extract ZIP container -(unsupported features are required to open this file).
    • -
    • multiVolumesNotSupported: unsupported feature: multi-volumed or spanned container.
    • -
    • encryptionNotSupported: unsupported feature: encryption.
    • -
    • patchingNotSupported: unsupported feature: patched data.
    • -
    • compressionNotSupported: unsupported feature: specified compression method.
    • -
    • wrongLocalHeader: local header of an entry wasn’t consistent with Central Directory record.
    • -
    • wrongCRC32: computed checksum of entry’s data wasn’t the same as the one stored in container.
    • -
    +

    Represents an error, which happened during processing ZIP container. +It may indicate that either container is damaged or it might not be ZIP container at all.

    See more
    @@ -310,7 +277,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    @@ -332,21 +299,8 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    -

    Error happened during LZMA decompression. -It may indicate that either the data is damaged or it might not be compressed with LZMA at all.

    - -
      -
    • wrongProperties: unsupported LZMA properties (greater than 225).
    • -
    • rangeDecoderInitError: unable to initialize RangedDecoder.
    • -
    • exceededUncompressedSize: the number of uncompressed bytes reached amount specified by archive -while decoding wasn’t finished.
    • -
    • windowIsEmpty: unable to repeat bytes because there is nothing to repeat.
    • -
    • rangeDecoderFinishError: range decoder was in a bad state when finish marker was reached.
    • -
    • repeatWillExceed: unable to repeat bytes because the number of bytes to repeat is greater -than the amount bytes that is left to decode.
    • -
    • notEnoughToRepeat: unable to repeat bytes because the amount of already decoded bytes is smaller -than the repeat length.
    • -
    +

    Represents an error, which happened during LZMA decompression. +It may indicate that either data is damaged or it might not be compressed with LZMA at all.

    See more
    @@ -359,7 +313,7 @@ than the repeat length.
    @@ -381,17 +335,8 @@ than the repeat length.
    -

    Error happened during unarchiving Zlib archive. -It may indicate that either the data is damaged or it might not be Zlib archive at all.

    - -
      -
    • wrongCompressionMethod: unsupported compression method (not 8).
    • -
    • wrongCompressionInfo: unsupported compression info (greater than 7).
    • -
    • wrongFcheck: first two bytes were inconsistent with each other.
    • -
    • wrongCompressionLevel: unsupported compression level (not 0, 1, 2 or 3).
    • -
    • WrongAdler32: computed Adler-32 checksum of uncompressed data didn’t match the archive’s value. -Associated value contains already decompressed data.
    • -
    +

    Represents an error, which happened during processing Zlib archive. +It may indicate that either archive is damaged or it might not be Zlib archive at all.

    See more
    @@ -404,7 +349,7 @@ Associated value contains already decompressed data.
    @@ -426,15 +371,8 @@ Associated value contains already decompressed data.
    -

    Error happened during deflate decompression. -It may indicate that either the data is damaged or it might not be compressed with DEFLATE at all.

    - -
      -
    • wrongUncompressedBlockLengths: length and nlength bytes of uncompressed block were not compatible.
    • -
    • wrongBlockType: unsupported block type (not 0, 1 or 2).
    • -
    • wrongSymbol: unsupported Huffman tree’s symbol.
    • -
    • symbolNotFound: symbol from input data was not found in Huffman tree.
    • -
    +

    Represents an error, which happened during Deflate compression or decompression. +It may indicate that either the data is damaged or it might not be compressed with Deflate at all.

    See more
    @@ -447,7 +385,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -469,21 +407,8 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Error happened during bzip2 decompression. -It may indicate that either the data is damaged or it might not be compressed with BZip2 at all.

    - -
      -
    • wrongMagic: unsupported magic number (not 0x425a).
    • -
    • wrongCompressionMethod: unsupported compression method (not type ‘h’).
    • -
    • wrongBlockSize: unsupported block size (not ‘0’ — ‘9’).
    • -
    • wrongBlockType: unsupported block type (not ‘pi’ or ‘sqrt(pi)’).
    • -
    • randomizedBlock: block is randomized; this is not supported.
    • -
    • wrongHuffmanGroups: unsupported number of Huffman tables/groups (not between 2 and 6).
    • -
    • wrongSelector: unsupported selector (greater than total number of Huffman groups).
    • -
    • wrongHuffmanLengthCode: unsupported code for Huffman length (not between 0 and 20).
    • -
    • symbolNotFound: symbol from input data was not found in Huffman tree.
    • -
    • wrongCRC: computed Cyclic Redundancy Check of uncompressed data didn’t match the archive’s value.
    • -
    +

    Represents an error, which happened during BZip2 decompression. +It may indicate that either data is damaged or it might not be compressed with BZip2 at all.

    See more
    @@ -496,7 +421,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -518,12 +443,8 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Error happened during processing TAR archive (container). -It may indicate that either the data is damaged or it might not be TAR archive (container) at all.

    - -
      -
    • error: error description.
    • -
    +

    Represents an error, which happened during processing TAR container. +It may indicate that either container is damaged or it might not be TAR container at all.

    See more
    @@ -536,7 +457,7 @@ It may indicate that either the data is damaged or it might not be TAR archive (
    @@ -558,23 +479,8 @@ It may indicate that either the data is damaged or it might not be TAR archive (
    -

    Error happened during unarchiving XZ archive. -It may indicate that either the data is damaged or it might not be XZ archive at all.

    - -
      -
    • wrongMagic: ‘magic’ bytes in archive’s header or footer weren’t equal to predefined value.
    • -
    • wrongArchiveInfo: incorrect value of one of archive’s special field (in block, index, header or footer).
    • -
    • fieldReservedValue: value of one of archive’s special field -(in block, index, header or footer) had reserved value.
    • -
    • wrongInfoCRC: incorrect value of one of archive’s special field (in block, index, header or footer).
    • -
    • wrongFilterID: unsupported value of filter ID (not LZMA2’s 0x21).
    • -
    • checkTypeSHA256: checksum’s type was SHA-256.
    • -
    • wrongDataSize: size of compressed or decompressed data wasn’t the same as specified in block.
    • -
    • wrongCheck: computed checksum of uncompressed data didn’t match the archive’s value. -Associated value contains already decompressed data.
    • -
    • wrongPadding: unsupported padding of one of structures in the archive.
    • -
    • multiByteIntegerError: error happened during reading of one of so called ‘multi-byte’ numbers.
    • -
    +

    Represents an error, which happened during unarchiving XZ archive. +It may indicate that either archive is damaged or it might not be XZ archive at all.

    See more
    @@ -587,7 +493,7 @@ Associated value contains already decompressed data.
    diff --git a/docs/Enums/BZip2Error.html b/docs/Enums/BZip2Error.html index 319fa64d..a5bfdd2f 100644 --- a/docs/Enums/BZip2Error.html +++ b/docs/Enums/BZip2Error.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,21 +176,8 @@ -

    Error happened during bzip2 decompression. -It may indicate that either the data is damaged or it might not be compressed with BZip2 at all.

    - - +

    Represents an error, which happened during BZip2 decompression. +It may indicate that either data is damaged or it might not be compressed with BZip2 at all.

    @@ -212,7 +199,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Magic number was not 0x425a.

    +

    ‘Magic’ number is not 0x425a.

    @@ -224,7 +211,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -246,7 +233,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Compression method was not type ‘h’ (not Huffman).

    +

    Compression method is not type ‘h’ (not Huffman).

    @@ -258,7 +245,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -280,7 +267,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Unknown block size (not from ‘0’ to ‘9’).

    +

    Unsupported block size (not from ‘0’ to ‘9’).

    @@ -292,7 +279,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -314,7 +301,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Unknown block type (was neither ‘pi’ nor ‘sqrt(pi)’).

    +

    Unsupported block type (is neither ‘pi’ nor ‘sqrt(pi)’).

    @@ -326,7 +313,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -360,7 +347,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    - Show on GitHub + Show on GitHub
    @@ -394,7 +381,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    - Show on GitHub + Show on GitHub
    @@ -416,7 +403,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Selector was greater than total number of Huffman tables/groups.

    +

    Selector is greater than the total number of Huffman tables/groups.

    @@ -428,7 +415,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -462,7 +449,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    - Show on GitHub + Show on GitHub
    @@ -484,7 +471,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Symbol was not found in Huffman tree.

    +

    Symbol wasn’t found in Huffman tree.

    @@ -496,7 +483,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -518,8 +505,8 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Computed CRC of uncompressed data didn’t match the value stored in the archive. -Associated value contains already decompressed data.

    +

    Computed checksum of uncompressed data doesn’t match the value stored in archive. +Associated value of the error contains already decompressed data.

    @@ -531,7 +518,7 @@ Associated value contains already decompressed data.

    diff --git a/docs/Enums/DeflateError.html b/docs/Enums/DeflateError.html index e7ebdcf9..ad715075 100644 --- a/docs/Enums/DeflateError.html +++ b/docs/Enums/DeflateError.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,15 +176,8 @@ -

    Error happened during deflate decompression. -It may indicate that either the data is damaged or it might not be compressed with DEFLATE at all.

    - - +

    Represents an error, which happened during Deflate compression or decompression. +It may indicate that either the data is damaged or it might not be compressed with Deflate at all.

    @@ -206,7 +199,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Uncompressed block’ length and nlength bytes were not compatible.

    +

    Uncompressed block’s length and nlength bytes isn’t consistent with each other.

    @@ -218,7 +211,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -240,7 +233,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Unknown block type (not from 0 to 2).

    +

    Unknown block type (not 0, 1 or 2).

    @@ -252,7 +245,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -286,7 +279,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    - Show on GitHub + Show on GitHub
    @@ -308,7 +301,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Symbol was not found in Huffman tree.

    +

    Symbol wasn’t found in Huffman tree.

    @@ -320,7 +313,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    diff --git a/docs/Enums/GzipError.html b/docs/Enums/GzipError.html index 54abc734..0db3728c 100644 --- a/docs/Enums/GzipError.html +++ b/docs/Enums/GzipError.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,19 +176,8 @@ -

    Error happened during unarchiving gzip archive. -It may indicate that either the data is damaged or it might not be gzip archive at all.

    - - +

    Represents an error, which happened during processing GZip archive. +It may indicate that either archive is damaged or it might not be GZip archive at all.

    @@ -210,7 +199,7 @@ Associated value contains already decompressed data.
    -

    First two bytes of archive were not 31 and 139.

    +

    First two bytes (‘magic’ number) of archive isn’t 31 and 139.

    @@ -222,7 +211,7 @@ Associated value contains already decompressed data.
    @@ -244,7 +233,7 @@ Associated value contains already decompressed data.
    -

    Compression method was other than 8 which is the only supported one.

    +

    Compression method used in archive is different from Deflate, which is the only supported one.

    @@ -256,7 +245,7 @@ Associated value contains already decompressed data.
    @@ -278,7 +267,8 @@ Associated value contains already decompressed data.
    -

    Reserved flags bits were not equal to 0.

    +

    One of the reserved fields in archive has an unexpected value, which can also mean (apart from damaged archive), +that archive uses a newer version of GZip format.

    @@ -290,7 +280,7 @@ Associated value contains already decompressed data.
    @@ -312,7 +302,7 @@ Associated value contains already decompressed data.
    -

    Computed CRC of header didn’t match the value stored in the archive.

    +

    Computed CRC of archive’s header doesn’t match the value stored in archive.

    @@ -324,7 +314,7 @@ Associated value contains already decompressed data.
    @@ -346,8 +336,8 @@ Associated value contains already decompressed data.
    -

    Computed CRC of uncompressed data didn’t match the value stored in the archive. -Associated value contains already decompressed data.

    +

    Computed checksum of uncompressed data doesn’t match the value stored in archive. +Associated value of the error contains already decompressed data.

    @@ -359,7 +349,7 @@ Associated value contains already decompressed data.

    @@ -381,7 +371,7 @@ Associated value contains already decompressed data.

    -

    Computed isize didn’t match the value stored in the archive.

    +

    Computed ‘isize’ didn’t match the value stored in the archive.

    @@ -393,7 +383,41 @@ Associated value contains already decompressed data.

    +
    + + + + +
    +
    -

    Error happened during LZMA2 decompression. -It may indicate that either the data is damaged or it might not be compressed with LZMA2 at all.

    - - +

    Represents an error, which happened during LZMA2 decompression. +It may indicate that either data is damaged or it might not be compressed with LZMA2 at all.

    @@ -207,7 +199,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Reserved bits of LZMA2 properties byte were not equal to zero.

    +

    Reserved bits of LZMA2 properties’ byte aren’t equal to zero.

    @@ -219,7 +211,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -241,7 +233,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Dictionary size was too big.

    +

    Dictionary size is too big.

    @@ -253,7 +245,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -287,7 +279,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    - Show on GitHub + Show on GitHub
    @@ -309,7 +301,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Unknown reset instruction encounetered in LZMA2 packet.

    +

    Unknown reset instruction encountered in LZMA2 packet.

    @@ -321,7 +313,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -343,8 +335,8 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Either size of decompressed data was not equal to specified one in LZMA2 packet or -amount of compressed data read was different from the one stored in LZMA2 packet.

    +

    Either size of decompressed data isn’t equal to the one specified in LZMA2 packet or +amount of compressed data read is different from the one stored in LZMA2 packet.

    @@ -356,7 +348,7 @@ amount of compressed data read was different from the one stored in LZMA2 packet
    diff --git a/docs/Enums/LZMAError.html b/docs/Enums/LZMAError.html index 3aed164a..645625fe 100644 --- a/docs/Enums/LZMAError.html +++ b/docs/Enums/LZMAError.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,21 +176,8 @@ -

    Error happened during LZMA decompression. -It may indicate that either the data is damaged or it might not be compressed with LZMA at all.

    - - +

    Represents an error, which happened during LZMA decompression. +It may indicate that either data is damaged or it might not be compressed with LZMA at all.

    @@ -212,7 +199,7 @@ than the repeat length.
    -

    Properties byte was greater than 225.

    +

    Properties’ byte is greater than 225.

    @@ -224,7 +211,7 @@ than the repeat length.
    @@ -258,7 +245,7 @@ than the repeat length.
    - Show on GitHub + Show on GitHub
    @@ -280,7 +267,7 @@ than the repeat length.
    -

    The number of uncompressed bytes hit limit in the middle of decoding.

    +

    Size of uncompressed data hit specified limit in the middle of decoding.

    @@ -292,7 +279,7 @@ than the repeat length.
    @@ -326,7 +313,7 @@ than the repeat length.
    - Show on GitHub + Show on GitHub
    @@ -360,7 +347,7 @@ than the repeat length.
    - Show on GitHub + Show on GitHub
    @@ -394,7 +381,7 @@ than the repeat length.
    - Show on GitHub + Show on GitHub
    @@ -428,7 +415,41 @@ than the repeat length.
    - Show on GitHub + Show on GitHub +
    + + + + + +
    +
    -

    Error happened during processing TAR archive (container). -It may indicate that either the data is damaged or it might not be TAR archive (container) at all.

    - - +

    Represents an error, which happened during processing TAR container. +It may indicate that either container is damaged or it might not be TAR container at all.

    @@ -203,19 +199,19 @@ It may indicate that either the data is damaged or it might not be TAR archive (
    -

    Undocumented

    +

    Size of data is too small, even to contain only one header.

    Declaration

    Swift

    -
    public enum TarError: Error
    +
    case tooSmallFileIsPassed
    @@ -237,19 +233,19 @@ It may indicate that either the data is damaged or it might not be TAR archive (
    -

    Undocumented

    +

    Failed to process a field as a number.

    Declaration

    Swift

    -
    public enum TarError: Error
    +
    case fieldIsNotNumber
    @@ -271,19 +267,19 @@ It may indicate that either the data is damaged or it might not be TAR archive (
    -

    Undocumented

    +

    Computed checksum of a header doesn’t match the value stored in container.

    Declaration

    Swift

    -
    public enum TarError: Error
    +
    case wrongHeaderChecksum
    @@ -305,19 +301,19 @@ It may indicate that either the data is damaged or it might not be TAR archive (
    -

    Undocumented

    +

    Unsupported version of USTAR format.

    Declaration

    Swift

    -
    public enum TarError: Error
    +
    case wrongUstarVersion
    @@ -339,19 +335,53 @@ It may indicate that either the data is damaged or it might not be TAR archive (
    -

    Undocumented

    +

    Entry from PAX extended header is in incorrect format.

    Declaration

    Swift

    -
    public enum TarError: Error
    +
    case wrongPaxHeaderEntry
    +
    + + + + +
    +
    -

    Error happened during unarchiving XZ archive. -It may indicate that either the data is damaged or it might not be XZ archive at all.

    - - +

    Represents an error, which happened during unarchiving XZ archive. +It may indicate that either archive is damaged or it might not be XZ archive at all.

    @@ -214,7 +199,7 @@ Associated value contains already decompressed data.
    -

    Either magic number in header or footer was not equal to predefined value.

    +

    Either ‘magic’ number in header or footer isn’t equal to a predefined value.

    @@ -226,7 +211,7 @@ Associated value contains already decompressed data.
    @@ -238,9 +223,9 @@ Associated value contains already decompressed data.
  • - - - wrongArchiveInfo + + + wrongFieldValue
    @@ -248,19 +233,19 @@ Associated value contains already decompressed data.
  • -

    One of special fields of archive had an incorrect value.

    +

    One of the fields in archive has an incorrect value.

    Declaration

    Swift

    -
    case wrongArchiveInfo
    +
    case wrongFieldValue
    @@ -282,7 +267,8 @@ Associated value contains already decompressed data.
    -

    One of special fields of archive had a reserved value.

    +

    One of the reserved fields in archive has an unexpected value, which can also mean (apart from damaged archive), +that archive uses a newer version of XZ format.

    @@ -294,7 +280,7 @@ Associated value contains already decompressed data.
    @@ -316,7 +302,7 @@ Associated value contains already decompressed data.
    -

    Checksum of one of special fields of archive was incorrect.

    +

    Checksum of one of the fields of archive doesn’t match the value stored in archive.

    @@ -328,7 +314,7 @@ Associated value contains already decompressed data.
    @@ -350,7 +336,7 @@ Associated value contains already decompressed data.
    -

    ID of filter(s) used in archvie was unsupported.

    +

    Filter used in archvie is unsupported.

    @@ -362,7 +348,7 @@ Associated value contains already decompressed data.
    @@ -384,7 +370,7 @@ Associated value contains already decompressed data.
    -

    Type of checksum of archive was SHA-256.

    +

    Archive uses SHA-256 checksum which is unsupported.

    @@ -396,7 +382,7 @@ Associated value contains already decompressed data.
    @@ -418,8 +404,8 @@ Associated value contains already decompressed data.
    -

    Either size of decompressed data was not equal to specified one in block header or -amount of compressed data read was different from the one stored in block header.

    +

    Either size of decompressed data isn’t equal to the one specified in archive or +amount of compressed data read is different from the one stored in archive.

    @@ -431,7 +417,7 @@ amount of compressed data read was different from the one stored in block header
    @@ -453,8 +439,8 @@ amount of compressed data read was different from the one stored in block header
    -

    Computed checksum of uncompressed data didn’t match the value stored in the archive. -Associated value contains already decompressed data.

    +

    Computed checksum of uncompressed data doesn’t match the value stored in the archive. +Associated value of the error contains already decompressed data.

    @@ -466,7 +452,7 @@ Associated value contains already decompressed data.

    @@ -488,7 +474,7 @@ Associated value contains already decompressed data.

    -

    Unsupported padding of a structure in the archive.

    +

    Padding (null-bytes appended to an archive’s structure) is incorrect.

    @@ -500,7 +486,7 @@ Associated value contains already decompressed data.

    @@ -534,7 +520,7 @@ Associated value contains already decompressed data.

    - Show on GitHub + Show on GitHub
    diff --git a/docs/Enums/ZipError.html b/docs/Enums/ZipError.html index 047dfc95..e74bfd4e 100644 --- a/docs/Enums/ZipError.html +++ b/docs/Enums/ZipError.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,22 +176,8 @@ -

    Error happened during processing ZIP archive (container). -It may indicate that either the data is damaged or it might not be ZIP archive (container) at all.

    - - +

    Represents an error, which happened during processing ZIP container. +It may indicate that either container is damaged or it might not be ZIP container at all.

    @@ -213,7 +199,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    -

    End of Central Directoty record was not found.

    +

    End of Central Directoty record wasn’t found.

    @@ -225,7 +211,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    @@ -247,7 +233,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    -

    Wrong signature of one of ZIP container’s structures.

    +

    Wrong signature of one of container’s structures.

    @@ -259,7 +245,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    @@ -281,7 +267,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    -

    Wrong either compressed or uncompressed size of a ZIP container’s entry.

    +

    Wrong either compressed or uncompressed size of a container’s entry.

    @@ -293,7 +279,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    @@ -315,7 +301,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    -

    Wrong number of version needed to extract ZIP container.

    +

    Version needed to process container is unsupported.

    @@ -327,7 +313,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    @@ -349,7 +335,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    -

    Archive either spanned or consists of several volumes. This feature is not supported.

    +

    Container is either spanned or consists of several volumes. These features aren’t supported.

    @@ -361,7 +347,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    @@ -383,7 +369,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    -

    Entry or record is encrypted. This feature is not supported.

    +

    Entry or record is encrypted. This feature isn’t supported.

    @@ -395,7 +381,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    @@ -417,7 +403,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    -

    Entry contains patched data. This feature is not supported.

    +

    Entry contains patched data. This feature isn’t supported.

    @@ -429,7 +415,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    @@ -451,7 +437,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    -

    Wrong compression method of an entry.

    +

    Entry is compressed using unsupported compression method.

    @@ -463,7 +449,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    @@ -485,7 +471,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    -

    Wrong local header of an entry.

    +

    Local header of an entry is inconsistent with Central Directory.

    @@ -497,7 +483,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    @@ -519,8 +505,8 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    -

    Computed CRC32 of entry’s data didn’t match the value stored in the container. -Associated value contains extracted data.

    +

    Computed checksum of entry’s data doesn’t match the value stored in container. +Associated value of the error contains entry’s data.

    @@ -532,7 +518,7 @@ Associated value contains extracted data.

    @@ -554,19 +540,19 @@ Associated value contains extracted data.

    -

    Undocumented

    +

    Either entry’s comment or file name cannot be processed using UTF-8 encoding.

    Declaration

    Swift

    -
    public enum ZipError: Error
    +
    case wrongTextField
    diff --git a/docs/Enums/ZlibError.html b/docs/Enums/ZlibError.html index 665a6523..61f3e13f 100644 --- a/docs/Enums/ZlibError.html +++ b/docs/Enums/ZlibError.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,17 +176,8 @@ -

    Error happened during unarchiving Zlib archive. -It may indicate that either the data is damaged or it might not be Zlib archive at all.

    - - +

    Represents an error, which happened during processing Zlib archive. +It may indicate that either archive is damaged or it might not be Zlib archive at all.

    @@ -208,7 +199,7 @@ Associated value contains already decompressed data.
    -

    Compression method was other than 8 which is the only supported one.

    +

    Compression method used in archive is different from Deflate, which is the only supported one.

    @@ -220,7 +211,7 @@ Associated value contains already decompressed data.
    @@ -242,7 +233,7 @@ Associated value contains already decompressed data.
    -

    Compression info was greater than 7 which is uncompatible number 8 compression method.

    +

    Compression info has value incompatible with Deflate compression method.

    @@ -254,7 +245,7 @@ Associated value contains already decompressed data.
    @@ -276,7 +267,7 @@ Associated value contains already decompressed data.
    -

    First two bytes were inconsistent with each other.

    +

    First two bytes of archive’s flags are inconsistent with each other.

    @@ -288,7 +279,7 @@ Associated value contains already decompressed data.
    @@ -310,7 +301,7 @@ Associated value contains already decompressed data.
    -

    Compression level was other than 0, 1, 2, 3.

    +

    Compression level has value, which is different from the supported ones.

    @@ -322,7 +313,7 @@ Associated value contains already decompressed data.
    @@ -344,8 +335,8 @@ Associated value contains already decompressed data.
    -

    Computed Adler-32 sum of uncompressed data didn’t match the value stored in the archive. -Associated value contains already decompressed data.

    +

    Computed checksum of uncompressed data doesn’t match the value stored in archive. +Associated value of the error contains already decompressed data.

    @@ -357,7 +348,7 @@ Associated value contains already decompressed data.

    diff --git a/docs/Protocols.html b/docs/Protocols.html index 6375a356..b49937fe 100644 --- a/docs/Protocols.html +++ b/docs/Protocols.html @@ -22,7 +22,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -191,7 +191,7 @@

    -

    Abstract archive class which supports unarchiving.

    +

    A type that represents an archive.

    See more
    @@ -204,7 +204,7 @@
    @@ -222,7 +222,7 @@
    -

    Abstract decompression algorithm class which supports decompression.

    +

    A type that provides an implementation of a particular decompression algorithm.

    See more
    @@ -235,7 +235,7 @@
    @@ -253,12 +253,20 @@
    -

    Undocumented

    +

    A type that represents a container of files, directories and/or other data.

    See more
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol Container
    + +
    +
    @@ -276,12 +284,20 @@
    -

    Undocumented

    +

    A type that represents an entry from a container (file or directory) with attributes.

    See more
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol ContainerEntry
    + +
    +
    diff --git a/docs/Protocols/Archive.html b/docs/Protocols/Archive.html index 04d2e675..3b330cb5 100644 --- a/docs/Protocols/Archive.html +++ b/docs/Protocols/Archive.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,7 +176,7 @@ -

    Abstract archive class which supports unarchiving.

    +

    A type that represents an archive.

    @@ -188,9 +188,9 @@
  • - - - unarchive(archiveData:) + + + unarchive(archive:)
    @@ -198,19 +198,19 @@
    -

    Abstract unarchive function.

    +

    Unarchive data from the archive.

    Declaration

    Swift

    -
    static func unarchive(archiveData: Data) throws -> Data
    +
    static func unarchive(archive: Data) throws -> Data
    diff --git a/docs/Protocols/Container.html b/docs/Protocols/Container.html index 51bedd79..70158a29 100644 --- a/docs/Protocols/Container.html +++ b/docs/Protocols/Container.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -170,7 +170,13 @@

    Container

    -

    Undocumented

    +
    +
    +
    public protocol Container
    + +
    +
    +

    A type that represents a container of files, directories and/or other data.

    @@ -182,9 +188,9 @@
  • - - - open(containerData:) + + + open(container:)
    @@ -192,11 +198,19 @@
    -

    Undocumented

    +

    Retrieve all the entries from the container.

    +
    +

    Declaration

    +
    +

    Swift

    +
    static func open(container: Data) throws -> [ContainerEntry]
    + +
    +
    diff --git a/docs/Protocols/ContainerEntry.html b/docs/Protocols/ContainerEntry.html index 83d16939..b7e9942d 100644 --- a/docs/Protocols/ContainerEntry.html +++ b/docs/Protocols/ContainerEntry.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -170,7 +170,13 @@

    ContainerEntry

    -

    Undocumented

    +
    +
    +
    public protocol ContainerEntry
    + +
    +
    +

    A type that represents an entry from a container (file or directory) with attributes.

    @@ -192,11 +198,19 @@
    -

    Undocumented

    +

    Retrieve name of the entry from the container.

    +
    +

    Declaration

    +
    +

    Swift

    +
    var name: String
    + +
    +
    @@ -214,11 +228,19 @@
    -

    Undocumented

    +

    Retrieve size of the entry’s data from the container.

    +
    +

    Declaration

    +
    +

    Swift

    +
    var size: Int
    + +
    +
    @@ -236,11 +258,19 @@
    -

    Undocumented

    +

    Check if entry is a directory.

    +
    +

    Declaration

    +
    +

    Swift

    +
    var isDirectory: Bool
    + +
    +
    @@ -258,11 +288,19 @@
    -

    Undocumented

    +

    Retrieve entry’s data from the container.

    +
    +

    Declaration

    +
    +

    Swift

    +
    func data() throws -> Data
    + +
    +
    diff --git a/docs/Protocols/DecompressionAlgorithm.html b/docs/Protocols/DecompressionAlgorithm.html index d9edaa85..3191ec43 100644 --- a/docs/Protocols/DecompressionAlgorithm.html +++ b/docs/Protocols/DecompressionAlgorithm.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,7 +176,7 @@ -

    Abstract decompression algorithm class which supports decompression.

    +

    A type that provides an implementation of a particular decompression algorithm.

    @@ -188,9 +188,9 @@
  • - - - decompress(compressedData:) + + + decompress(data:)
    @@ -198,19 +198,19 @@
    -

    Abstract decompress function.

    +

    Decompress data compressed with particular algorithm.

    Declaration

    Swift

    -
    static func decompress(compressedData: Data) throws -> Data
    +
    static func decompress(data: Data) throws -> Data
    diff --git a/docs/Structs.html b/docs/Structs.html index 755e680d..b6d2ee06 100644 --- a/docs/Structs.html +++ b/docs/Structs.html @@ -22,7 +22,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -191,7 +191,7 @@

    -

    A structure which provides information about gzip archive.

    +

    Represents a GZip archive’s header.

    See more
    @@ -204,7 +204,7 @@
    @@ -226,7 +226,7 @@
    -

    A structure which provides information about zlib archive.

    +

    Represents a Zlib archive’s header.

    See more
    @@ -239,7 +239,7 @@
    diff --git a/docs/Structs/GzipHeader.html b/docs/Structs/GzipHeader.html index 80379478..9031ee75 100644 --- a/docs/Structs/GzipHeader.html +++ b/docs/Structs/GzipHeader.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,7 +176,7 @@ -

    A structure which provides information about gzip archive.

    +

    Represents a GZip archive’s header.

    @@ -198,7 +198,7 @@
    -

    Supported compression methods in gzip archive.

    +

    Supported compression methods in GZip archive.

    See more
    @@ -211,7 +211,7 @@
    @@ -229,7 +229,7 @@
    -

    Type of file system on which gzip archive was created.

    +

    Type of file system on which GZip archive was created.

    See more
    @@ -242,7 +242,7 @@
    @@ -260,7 +260,7 @@
    -

    Compression method of archive. Always equals to .deflate.

    +

    Compression method of archive. Currently, always equals to .deflate.

    @@ -272,7 +272,7 @@
    @@ -290,7 +290,9 @@
    -

    The most recent modification time of the original file. If set to 0 (default value == unset), then nil.

    +

    The most recent modification time of the original file. +If corresponding archive’s field is set to 0, which means that no time was specified, +then this property is nil.

    @@ -302,7 +304,7 @@
    @@ -320,7 +322,7 @@
    -

    Type of file system on which compression took place.

    +

    Type of file system on which archivation took place.

    @@ -332,7 +334,7 @@
    @@ -340,9 +342,9 @@
  • - - - originalFileName + + + fileName
    @@ -350,19 +352,19 @@
    -

    Name of the original file.

    +

    Name of the original file. If archive doesn’t contain file’s name, then nil.

    Declaration

    Swift

    -
    public let originalFileName: String?
    +
    public let fileName: String?
    @@ -380,7 +382,7 @@
    -

    Comment inside the archive.

    +

    Comment stored in archive. If archive doesn’t contain any comment, then nil.

    @@ -392,7 +394,7 @@
    @@ -400,9 +402,9 @@
  • - - - init(archiveData:) + + + isTextFile
    @@ -410,13 +412,43 @@
    -

    Initializes the structure with the values of first ‘member’ in gzip archive presented in archiveData.

    +

    Check if file is likely to be text file or ASCII-file.

    -

    If data passed is not actually a gzip archive, GzipError will be thrown.

    +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let isTextFile: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(archive:) + +
    +
    +
    +
    +
    +
    +

    Initializes the structure with the values from the first ‘member’ of GZip archive.

    + +

    If data passed is not actually a GZip archive, GzipError will be thrown.

    Throws

    -

    GzipError. It may indicate that either the data is damaged or -it might not be compressed with gzip at all.

    +

    GzipError. It may indicate that either archive is damaged or +it might not be archived with GZip at all.

    @@ -425,7 +457,7 @@ it might not be compressed with gzip at all.

    Declaration

    Swift

    -
    public init(archiveData: Data) throws
    +
    public init(archive data: Data) throws
    @@ -436,12 +468,12 @@ it might not be compressed with gzip at all.

    - archiveData + archive
    -

    Data compressed with gzip.

    +

    Data archived with GZip.

    @@ -449,7 +481,7 @@ it might not be compressed with gzip at all.

    diff --git a/docs/Structs/GzipHeader/CompressionMethod.html b/docs/Structs/GzipHeader/CompressionMethod.html index a75c1923..899545d9 100644 --- a/docs/Structs/GzipHeader/CompressionMethod.html +++ b/docs/Structs/GzipHeader/CompressionMethod.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,7 +176,7 @@ -

    Supported compression methods in gzip archive.

    +

    Supported compression methods in GZip archive.

    @@ -210,7 +210,7 @@ diff --git a/docs/Structs/GzipHeader/FileSystemType.html b/docs/Structs/GzipHeader/FileSystemType.html index e8814fed..bf47adc2 100644 --- a/docs/Structs/GzipHeader/FileSystemType.html +++ b/docs/Structs/GzipHeader/FileSystemType.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,7 +176,7 @@ -

    Type of file system on which gzip archive was created.

    +

    Type of file system on which GZip archive was created.

    @@ -198,7 +198,12 @@
    -

    One of many Linux systems. (It seems like modern macOS systems also fall into this category).

    +

    One of many UNIX-like systems.

    +
    +

    Note

    + It seems like modern macOS systems also fall into this category. + +
    @@ -210,7 +215,7 @@
    @@ -232,7 +237,7 @@
    -

    Older Macintosh (Mac OS, OS X) systems.

    +

    Older Macintosh systems.

    @@ -244,7 +249,7 @@
    @@ -278,7 +283,7 @@ @@ -312,7 +317,7 @@ @@ -334,7 +339,7 @@
    -

    File system was one of the rare systems..

    +

    File system is one of the rare systems.

    @@ -346,7 +351,7 @@
    diff --git a/docs/Structs/ZlibHeader.html b/docs/Structs/ZlibHeader.html index 61a5bf3f..933e2284 100644 --- a/docs/Structs/ZlibHeader.html +++ b/docs/Structs/ZlibHeader.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,7 +176,7 @@ -

    A structure which provides information about zlib archive.

    +

    Represents a Zlib archive’s header.

    @@ -211,7 +211,7 @@ @@ -229,7 +229,7 @@
    -

    Levels of compression which can be used to create zlib archive.

    +

    Levels of compression which can be used to create Zlib archive.

    See more
    @@ -242,7 +242,7 @@
    @@ -260,7 +260,7 @@
    -

    Compression method of archive. Always equals to .deflate.

    +

    Compression method of archive. Currently, always equals to .deflate.

    @@ -272,7 +272,7 @@
    @@ -290,7 +290,7 @@
    -

    Level of compression in the archive.

    +

    Level of compression used in archive.

    @@ -302,7 +302,7 @@
    @@ -320,7 +320,7 @@
    -

    Size of ‘window’: moving interval of data which was used to make the archive

    +

    Size of ‘window’: moving interval of data which was used to make archive.

    @@ -332,7 +332,7 @@
    @@ -340,9 +340,9 @@
  • - - - init(archiveData:) + + + init(archive:)
    @@ -350,13 +350,13 @@
    -

    Initializes the structure with the values from zlib archive presented in archiveData.

    +

    Initializes the structure with the values from Zlib archive.

    -

    If data passed is not actually a zlib archive, ZlibError will be thrown.

    +

    If data passed is not actually a Zlib archive, ZlibError will be thrown.

    Throws

    -

    ZlibError. It may indicate that either the data is damaged or -it might not be compressed with zlib at all.

    +

    ZlibError. It may indicate that either archive is damaged or +it might not be archived with Zlib at all.

    @@ -365,7 +365,7 @@ it might not be compressed with zlib at all.

    Declaration

    Swift

    -
    public init(archiveData: Data) throws
    +
    public init(archive data: Data) throws
    @@ -376,12 +376,12 @@ it might not be compressed with zlib at all.

    - archiveData + archive
    -

    Data compressed with zlib.

    +

    Data archived with zlib.

    @@ -389,7 +389,7 @@ it might not be compressed with zlib at all.

    diff --git a/docs/Structs/ZlibHeader/CompressionLevel.html b/docs/Structs/ZlibHeader/CompressionLevel.html index f0e28da0..21c22d48 100644 --- a/docs/Structs/ZlibHeader/CompressionLevel.html +++ b/docs/Structs/ZlibHeader/CompressionLevel.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,7 +176,7 @@ -

    Levels of compression which can be used to create zlib archive.

    +

    Levels of compression which can be used to create Zlib archive.

    @@ -210,7 +210,7 @@ @@ -244,7 +244,7 @@ @@ -278,7 +278,7 @@ @@ -312,7 +312,7 @@ diff --git a/docs/Structs/ZlibHeader/CompressionMethod.html b/docs/Structs/ZlibHeader/CompressionMethod.html index c640d261..74298ff8 100644 --- a/docs/Structs/ZlibHeader/CompressionMethod.html +++ b/docs/Structs/ZlibHeader/CompressionMethod.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -210,7 +210,7 @@

    diff --git a/docs/badge.svg b/docs/badge.svg index 0d836268..2606d804 100644 --- a/docs/badge.svg +++ b/docs/badge.svg @@ -1 +1 @@ -documentationdocumentation75%75% \ No newline at end of file +documentationdocumentation100%100% \ No newline at end of file diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes.html index 7fa3b6d8..e2240f7e 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes.html @@ -22,7 +22,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -191,7 +191,7 @@

    -

    Provides function to decompress data, which were compressed with LZMA2

    +

    Provides decompression function for LZMA2 algorithm.

    See more
    @@ -199,12 +199,12 @@

    Declaration

    Swift

    -
    public final class LZMA2: DecompressionAlgorithm
    +
    public class LZMA2: DecompressionAlgorithm
    @@ -226,7 +226,7 @@
    -

    Provides unarchive function for GZip archives.

    +

    Provides unarchive and archive functions for GZip archives.

    See more
    @@ -234,12 +234,12 @@

    Declaration

    Swift

    -
    public final class GzipArchive: Archive
    +
    public class GzipArchive: Archive
    @@ -261,7 +261,7 @@
    -

    Represents either a file or directory entry inside ZIP archive.

    +

    Represents either a file or directory entry in ZIP container.

    See more
    @@ -274,7 +274,7 @@
    @@ -292,7 +292,7 @@
    -

    Provides function which opens ZIP archives (containers).

    +

    Provides open function for ZIP containers.

    See more
    @@ -305,7 +305,7 @@
    @@ -327,7 +327,7 @@
    -

    Provides function to decompress data, which were compressed with LZMA

    +

    Provides decompression function for LZMA algorithm.

    See more
    @@ -335,12 +335,12 @@

    Declaration

    Swift

    -
    public final class LZMA: DecompressionAlgorithm
    +
    public class LZMA: DecompressionAlgorithm
    @@ -362,7 +362,7 @@
    -

    Provides unarchive function for Zlib archives.

    +

    Provides unarchive and archive functions for Zlib archives.

    See more
    @@ -370,12 +370,12 @@

    Declaration

    Swift

    -
    public final class ZlibArchive: Archive
    +
    public class ZlibArchive: Archive
    @@ -397,7 +397,7 @@
    -

    Provides function to decompress data, which were compressed with DEFLATE.

    +

    Provides compression and decompression functions for Deflate algorithm.

    See more
    @@ -405,12 +405,12 @@

    Declaration

    Swift

    -
    public final class Deflate: DecompressionAlgorithm
    +
    public class Deflate: DecompressionAlgorithm
    @@ -432,7 +432,7 @@
    -

    Provides function to decompress data, which were compressed using BZip2.

    +

    Provides decompression function for BZip2 algorithm.

    See more
    @@ -440,12 +440,12 @@

    Declaration

    Swift

    -
    public final class BZip2: DecompressionAlgorithm
    +
    public class BZip2: DecompressionAlgorithm
    @@ -467,7 +467,7 @@
    -

    Represents either a file or directory entry inside TAR archive.

    +

    Represents either a file or directory entry in TAR container.

    See more
    @@ -480,7 +480,7 @@
    @@ -498,7 +498,7 @@
    -

    Provides function which opens TAR archives (containers).

    +

    Provides open function for TAR containers.

    See more
    @@ -511,7 +511,7 @@
    @@ -541,12 +541,12 @@

    Declaration

    Swift

    -
    public final class XZArchive: Archive
    +
    public class XZArchive: Archive
    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/BZip2.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/BZip2.html index 391621e7..4d7dd421 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/BZip2.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/BZip2.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -172,11 +172,11 @@

    BZip2

    -
    public final class BZip2: DecompressionAlgorithm
    +
    public class BZip2: DecompressionAlgorithm
    -

    Provides function to decompress data, which were compressed using BZip2.

    +

    Provides decompression function for BZip2 algorithm.

    @@ -188,9 +188,9 @@
  • - - - decompress(compressedData:) + + + decompress(data:)
    @@ -198,13 +198,13 @@
    -

    Decompresses compressedData with BZip2 algortihm.

    +

    Decompresses data using BZip2 algortihm.

    -

    If data passed is not actually compressed with BZip2, BZip2Error will be thrown.

    +

    If data is not actually compressed with BZip2, BZip2Error will be thrown.

    Throws

    -

    BZip2Error if unexpected byte (bit) sequence was encountered in compressedData. -It may indicate that either the data is damaged or it might not be compressed with BZip2 at all.

    +

    BZip2Error if unexpected byte (bit) sequence was encountered in data. +It may indicate that either data is damaged or it might not be compressed with BZip2 at all.

    @@ -213,7 +213,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Declaration

    Swift

    -
    public static func decompress(compressedData data: Data) throws -> Data
    +
    public static func decompress(data: Data) throws -> Data
    @@ -224,7 +224,7 @@ It may indicate that either the data is damaged or it might not be compressed wi - compressedData + data @@ -241,7 +241,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Decompressed data.

    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/Deflate.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/Deflate.html index 48b672aa..50211aec 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/Deflate.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/Deflate.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -172,11 +172,11 @@

    Deflate

    -
    public final class Deflate: DecompressionAlgorithm
    +
    public class Deflate: DecompressionAlgorithm
    -

    Provides function to decompress data, which were compressed with DEFLATE.

    +

    Provides compression and decompression functions for Deflate algorithm.

    @@ -188,9 +188,9 @@
  • - - - decompress(compressedData:) + + + decompress(data:)
    @@ -198,13 +198,18 @@
    -

    Decompresses compressedData with DEFLATE algortihm.

    +

    Decompresses data using Deflate algortihm.

    -

    If data passed is not actually compressed with DEFLATE, DeflateError will be thrown.

    +

    If data is not actually compressed with Deflate, DeflateError will be thrown.

    +
    +

    Note

    +

    This function is specification compliant.

    + +

    Throws

    -

    DeflateError if unexpected byte (bit) sequence was encountered in compressedData. -It may indicate that either the data is damaged or it might not be compressed with DEFLATE at all.

    +

    DeflateError if unexpected byte (bit) sequence was encountered in data. +It may indicate that either data is damaged or it might not be compressed with Deflate at all.

    @@ -213,7 +218,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Declaration

    Swift

    -
    public static func decompress(compressedData data: Data) throws -> Data
    +
    public static func decompress(data: Data) throws -> Data
    @@ -224,12 +229,12 @@ It may indicate that either the data is damaged or it might not be compressed wi - compressedData + data
    -

    Data compressed with DEFLATE.

    +

    Data compressed with Deflate.

    @@ -241,7 +246,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Decompressed data.

    @@ -259,15 +264,16 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Compresses data with DEFLATE algortihm.

    +

    Compresses data with Deflate algortihm.

    If during compression something goes wrong DeflateError will be thrown.

    Note

    - Currently, SWCompression creates only one block for all data +

    Currently, SWCompression creates only one block for all data and the block can either be uncompressed or compressed with static Huffman encoding. -Uncompressed block is created if amount of data provided is less than 3 bytes and -static Huffman is used in all other cases. +Choice of one block type or the other depends on bytes’ statistics of data. +However, if data size is greater than 65535 (the maximum value stored in 2 bytes), +then static Huffman block will be created.

    @@ -280,8 +286,27 @@ static Huffman is used in all other cases.
    +
    +

    Parameters

    + + + + + + + +
    + + data + + +
    +

    Data to compress.

    +
    +
    +
    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/GzipArchive.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/GzipArchive.html index dd78db7f..ff5cc651 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/GzipArchive.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/GzipArchive.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -172,11 +172,11 @@

    GzipArchive

    -
    public final class GzipArchive: Archive
    +
    public class GzipArchive: Archive
    -

    Provides unarchive function for GZip archives.

    +

    Provides unarchive and archive functions for GZip archives.

    @@ -188,9 +188,9 @@
  • - - - unarchive(archiveData:) + + + unarchive(archive:)
    @@ -198,11 +198,11 @@
    -

    Unarchives gzip archive stored in archiveData.

    +

    Unarchives GZip archive.

    -

    If data passed is not actually a gzip archive, GzipError will be thrown.

    +

    If data passed is not actually a GZip archive, GzipError will be thrown.

    -

    If data inside the archive is not actually compressed with DEFLATE algorithm, DeflateError will be thrown.

    +

    If data in archive is not actually compressed with Deflate algorithm, DeflateError will be thrown.

    Note

    This function is specification compliant.

    @@ -210,8 +210,9 @@

    Throws

    -

    DeflateError or GzipError depending on the type of inconsistency in data. -It may indicate that either the data is damaged or it might not be compressed with gzip or DEFLATE at all.

    +

    DeflateError or GzipError depending on the type of the problem. +It may indicate that either archive is damaged or +it might not be archived with GZip or compressed with Deflate at all.

    @@ -220,7 +221,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Declaration

    Swift

    -
    public static func unarchive(archiveData data: Data) throws -> Data
    +
    public static func unarchive(archive data: Data) throws -> Data
    @@ -231,12 +232,12 @@ It may indicate that either the data is damaged or it might not be compressed wi - archiveData + archive
    -

    Data compressed with gzip.

    +

    Data archived with GZip.

    @@ -248,7 +249,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Unarchived data.

    @@ -256,9 +257,9 @@ It may indicate that either the data is damaged or it might not be compressed wi
  • - - - archive(data:) + + + archive(data:comment:fileName:writeHeaderCRC:isTextFile:osType:modificationTime:)
    @@ -266,12 +267,13 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Archives data into GZip archive. Data will be also compressed with DEFLTATE algorithm. -Fields in the header of the resulting archive will be set to default values -(i.e. no mtime, no flags, no file name, unknown OS type). -It will be also specified that the compressor used slowest DEFLATE algorithm.

    +

    Archives data into GZip archive, using various specified options. +Data will be also compressed with Deflate algorithm. +It will be also specified in archive’s header that the compressor used the slowest Deflate algorithm.

    -

    If during compression something goes wrong DeflateError will be thrown.

    +

    If during compression something goes wrong DeflateError will be thrown. +If either fileName or comment cannot be encoded with ISO Latin-1 encoding, +then GzipError.cannotEncodeISOLatin1 will be thrown.

    Note

    This function is specification compliant.

    @@ -279,7 +281,7 @@ It will be also specified that the compressor used slowest DEFLATE algorithm.

    Throws

    -

    DeflateError if an error was encountered during compression.

    +

    DeflateError or GzipError.cannotEncodeISOLatin1 depending on the type of of the problem.

    @@ -288,7 +290,9 @@ It will be also specified that the compressor used slowest DEFLATE algorithm.

    Declaration

    Swift

    -
    public static func archive(data: Data) throws -> Data
    +
    public static func archive(data: Data, comment: String? = nil, fileName: String? = nil,
    +                               writeHeaderCRC: Bool = false, isTextFile: Bool = false,
    +                               osType: GzipHeader.FileSystemType? = nil, modificationTime: Date? = nil) throws -> Data
    @@ -308,15 +312,87 @@ It will be also specified that the compressor used slowest DEFLATE algorithm.

    + + + + comment + + + +
    +

    Additional comment, which will be stored as a separate field in archive.

    +
    + + + + + + fileName + + + +
    +

    Name of the file which will be archived.

    +
    + + + + + + writeHeaderCRC + + + +
    +

    Set to true, if you want to store consistency check for archive’s header.

    +
    + + + + + + isTextFile + + + +
    +

    Set to true, if the file which will be archived is text file or ASCII-file.

    +
    + + + + + + osType + + + +
    +

    Type of the system on which this archive will be created.

    +
    + + + + + + modificationTime + + + +
    +

    Last time the file was modified.

    +
    + +

    Return Value

    -

    Data object with resulting archive.

    +

    Resulting archive’s data.

    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/LZMA.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/LZMA.html index 7810dc32..ef6a5d44 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/LZMA.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/LZMA.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -172,11 +172,11 @@

    LZMA

    -
    public final class LZMA: DecompressionAlgorithm
    +
    public class LZMA: DecompressionAlgorithm
    -

    Provides function to decompress data, which were compressed with LZMA

    +

    Provides decompression function for LZMA algorithm.

    @@ -188,9 +188,9 @@
  • - - - decompress(compressedData:) + + + decompress(data:)
    @@ -198,13 +198,13 @@
    -

    Decompresses compressedData with LZMA algortihm.

    +

    Decompresses data using LZMA algortihm.

    -

    If data passed is not actually compressed with LZMA, LZMAError will be thrown.

    +

    If data is not actually compressed with LZMA, LZMAError will be thrown.

    Throws

    -

    LZMAError if unexpected byte (bit) sequence was encountered in compressedData. -It may indicate that either the data is damaged or it might not be compressed with LZMA at all.

    +

    LZMAError if unexpected byte (bit) sequence was encountered in data. +It may indicate that either data is damaged or it might not be compressed with LZMA at all.

    @@ -213,7 +213,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Declaration

    Swift

    -
    public static func decompress(compressedData data: Data) throws -> Data
    +
    public static func decompress(data: Data) throws -> Data
    @@ -224,7 +224,7 @@ It may indicate that either the data is damaged or it might not be compressed wi - compressedData + data @@ -241,7 +241,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Decompressed data.

    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/LZMA2.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/LZMA2.html index 644475ed..3b9cce92 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/LZMA2.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/LZMA2.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -172,11 +172,11 @@

    LZMA2

    -
    public final class LZMA2: DecompressionAlgorithm
    +
    public class LZMA2: DecompressionAlgorithm
    -

    Provides function to decompress data, which were compressed with LZMA2

    +

    Provides decompression function for LZMA2 algorithm.

    @@ -188,9 +188,9 @@
  • - - - decompress(compressedData:) + + + decompress(data:)
    @@ -198,13 +198,13 @@
    -

    Decompresses compressedData with LZMA2 algortihm. LZMA2 is a modification of LZMA.

    +

    Decompresses data using LZMA2 algortihm.

    -

    If data passed is not actually compressed with LZMA2, LZMA2Error or LZMAError will be thrown.

    +

    If data is not actually compressed with LZMA2, LZMAError or LZMA2Error will be thrown.

    Throws

    -

    LZMA2Error or LZMAError if unexpected byte (bit) sequence was encountered in compressedData. -It may indicate that either the data is damaged or it might not be compressed with LZMA2 at all.

    +

    LZMAError or LZMA2Error if unexpected byte (bit) sequence was encountered in data. +It may indicate that either data is damaged or it might not be compressed with LZMA2 at all.

    @@ -213,7 +213,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Declaration

    Swift

    -
    public static func decompress(compressedData data: Data) throws -> Data
    +
    public static func decompress(data: Data) throws -> Data
    @@ -224,7 +224,7 @@ It may indicate that either the data is damaged or it might not be compressed wi - compressedData + data @@ -241,7 +241,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Decompressed data.

    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/TarContainer.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/TarContainer.html index bbf3179b..32af50ed 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/TarContainer.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/TarContainer.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,7 +176,7 @@ -

    Provides function which opens TAR archives (containers).

    +

    Provides open function for TAR containers.

    @@ -188,9 +188,9 @@
  • - - - open(containerData:) + + + open(container:)
    @@ -198,19 +198,55 @@
    -

    Undocumented

    +

    Processes TAR container and returns an array of ContainerEntries (which are actually TarEntries).

    +
    +

    Important

    +

    The order of entries is defined by TAR container and, +particularly, by a creator of a given TAR container. +It is likely that directories will be encountered earlier than files stored in those directories, +but one SHOULD NOT rely on any particular order.

    + +
    +
    +

    Throws

    +

    TarError, which may indicate that either container is damaged or it might not be TAR container at all.

    + +

    Declaration

    Swift

    -
    public class TarContainer: Container
    +
    public static func open(container data: Data) throws -> [ContainerEntry]
    +
    +

    Parameters

    + + + + + + + +
    + + container + + +
    +

    TAR container’s data.

    +
    +
    +
    +
    +

    Return Value

    +

    Array of TarEntry as an array of ContainerEntry.

    +
    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/TarEntry.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/TarEntry.html index 89fdeeba..5977bab6 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/TarEntry.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/TarEntry.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,7 +176,7 @@ -

    Represents either a file or directory entry inside TAR archive.

    +

    Represents either a file or directory entry in TAR container.

    @@ -198,7 +198,7 @@
    -

    Undocumented

    +

    Represents a type of an entry.

    See more
    @@ -206,12 +206,12 @@

    Declaration

    Swift

    -
    public class TarEntry: ContainerEntry
    +
    public enum EntryType: String
    @@ -241,7 +241,7 @@ @@ -259,109 +259,19 @@
    -

    Undocumented

    +

    True, if an entry is a directory.

    Declaration

    Swift

    -
    public class TarEntry: ContainerEntry
    +
    public var isDirectory: Bool
    -
    - -
  • -
  • -
    - - - - mode - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class TarEntry: ContainerEntry
    - -
    -
    - -
    -
    -
  • -
  • -
    - - - - ownerID - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class TarEntry: ContainerEntry
    - -
    -
    - -
    -
    -
  • -
  • -
    - - - - groupID - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class TarEntry: ContainerEntry
    - -
    -
    -
    @@ -379,19 +289,109 @@
    -

    Undocumented

    +

    Size of the data associated with the entry.

    Declaration

    Swift

    -
    public class TarEntry: ContainerEntry
    +
    public private(set) var size: Int
    +
    + +
  • +
  • +
    + + + + mode + +
    +
    +
    +
    +
    +
    +

    File mode.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let mode: Int?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ownerID + +
    +
    +
    +
    +
    +
    +

    Owner’s ID.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public private(set) var ownerID: Int?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + groupID + +
    +
    +
    +
    +
    +
    +

    Owner’s group ID.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public private(set) var groupID: Int?
    + +
    +
    +
    @@ -409,19 +409,19 @@
    -

    Undocumented

    +

    The most recent modification time of the original file or directory.

    Declaration

    Swift

    -
    public class TarEntry: ContainerEntry
    +
    public private(set) var modificationTime: Date
    @@ -439,19 +439,19 @@
    -

    Undocumented

    +

    Type of entry.

    Declaration

    Swift

    -
    public class TarEntry: ContainerEntry
    +
    public let type: EntryType
    @@ -469,19 +469,19 @@
    -

    Undocumented

    +

    Owner’s user name.

    Declaration

    Swift

    -
    public class TarEntry: ContainerEntry
    +
    public private(set) var ownerUserName: String?
    @@ -499,19 +499,19 @@
    -

    Undocumented

    +

    Owner’s group name.

    Declaration

    Swift

    -
    public class TarEntry: ContainerEntry
    +
    public private(set) var ownerGroupName: String?
    @@ -529,19 +529,19 @@
    -

    Undocumented

    +

    The most recent access time of the original file or directory (PAX only).

    Declaration

    Swift

    -
    public class TarEntry: ContainerEntry
    +
    public private(set) var accessTime: Date?
    @@ -559,19 +559,19 @@
    -

    Undocumented

    +

    Name of the character set used to encode entry’s data (PAX only).

    Declaration

    Swift

    -
    public class TarEntry: ContainerEntry
    +
    public private(set) var charset: String?
    @@ -589,19 +589,19 @@
    -

    Undocumented

    +

    Comment associated with the entry (PAX only).

    Declaration

    Swift

    -
    public class TarEntry: ContainerEntry
    +
    public private(set) var comment: String?
    @@ -619,19 +619,19 @@
    -

    Undocumented

    +

    Path to linked entry (PAX only).

    Declaration

    Swift

    -
    public class TarEntry: ContainerEntry
    +
    public private(set) var linkPath: String?
    @@ -649,19 +649,19 @@
    -

    Undocumented

    +

    Other entries from PAX extended headers.

    Declaration

    Swift

    -
    public class TarEntry: ContainerEntry
    +
    public private(set) var unknownExtendedHeaderEntries: [String: String] = [:]
    @@ -680,12 +680,6 @@

    Returns data associated with this entry.

    -
    -

    Note

    - Returned Data object with the size of 0 can either indicate that the entry is an empty file -or it is a directory. - -
    @@ -697,7 +691,7 @@ or it is a directory.
    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/TarEntry/EntryType.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/TarEntry/EntryType.html index 5a40df63..cfc0eb1e 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/TarEntry/EntryType.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/TarEntry/EntryType.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -170,7 +170,13 @@

    EntryType

    -

    Undocumented

    +
    +
    +
    public enum EntryType: String
    + +
    +
    +

    Represents a type of an entry.

    @@ -192,11 +198,19 @@
    -

    Undocumented

    +

    Normal file.

    +
    +

    Declaration

    +
    +

    Swift

    +
    case normal = "0"
    + +
    +
    @@ -218,11 +232,19 @@
    -

    Undocumented

    +

    Hard linked entry.

    +
    +

    Declaration

    +
    +

    Swift

    +
    case hardLink = "1"
    + +
    +
    @@ -244,11 +266,19 @@
    -

    Undocumented

    +

    Symbolically linked entry.

    +
    +

    Declaration

    +
    +

    Swift

    +
    case symbolicLink = "2"
    + +
    +
    @@ -270,11 +300,19 @@
    -

    Undocumented

    +

    Character special file.

    +
    +

    Declaration

    +
    +

    Swift

    +
    case characterSpecial = "3"
    + +
    +
    @@ -296,11 +334,19 @@
    -

    Undocumented

    +

    Block special file.

    +
    +

    Declaration

    +
    +

    Swift

    +
    case blockSpecial = "4"
    + +
    +
    @@ -322,11 +368,19 @@
    -

    Undocumented

    +

    Directory.

    +
    +

    Declaration

    +
    +

    Swift

    +
    case directory = "5"
    + +
    +
    @@ -348,11 +402,19 @@
    -

    Undocumented

    +

    FIFO special file.

    +
    +

    Declaration

    +
    +

    Swift

    +
    case fifo = "6"
    + +
    +
    @@ -374,11 +436,19 @@
    -

    Undocumented

    +

    Contiguous file.

    +
    +

    Declaration

    +
    +

    Swift

    +
    case contiguous = "7"
    + +
    +
    @@ -400,11 +470,19 @@
    -

    Undocumented

    +

    PAX global extended header. (Should not be encountered separately).

    +
    +

    Declaration

    +
    +

    Swift

    +
    case globalExtendedHeader = "g"
    + +
    +
    @@ -426,11 +504,19 @@
    -

    Undocumented

    +

    PAX local extended header. (Should not be encountered separately).

    +
    +

    Declaration

    +
    +

    Swift

    +
    case localExtendedHeader = "x"
    + +
    +
    @@ -452,11 +538,19 @@
    -

    Undocumented

    +

    Either unknown type, vendor specific or reserved value.

    +
    +

    Declaration

    +
    +

    Swift

    +
    case vendorUnknownOrReserved
    + +
    +
    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/XZArchive.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/XZArchive.html index 34de8365..6e80d6a7 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/XZArchive.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/XZArchive.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -172,7 +172,7 @@

    XZArchive

    -
    public final class XZArchive: Archive
    +
    public class XZArchive: Archive
    @@ -188,9 +188,9 @@
  • - - - unarchive(archiveData:) + + + unarchive(archive:)
    @@ -198,17 +198,18 @@
    -

    Unarchives xz archive stored in archiveData.

    +

    Unarchives XZ archive.

    -

    If data passed is not actually a xz archive, XZError will be thrown. -If filters other than LZMA2 are used in archive then XZError.wrongFilterID will be thrown.

    +

    If data passed is not actually XZ archive, XZError will be thrown. +Particularly, if filters other than LZMA2 are used in archive, +then XZError.wrongFilter will be thrown.

    -

    If data inside the archive is not actually compressed with LZMA2, -LZMAError or LZMA2Error will be thrown.

    +

    If an error happens during LZMA2 decompression, +then LZMAError or LZMA2Error will be thrown.

    Throws

    -

    LZMAError, LZMA2Error or XZError depending on the type of inconsistency in data. -It may indicate that either the data is damaged or it might not be compressed with xz or LZMA(2) at all.

    +

    LZMAError, LZMA2Error or XZError depending on the type of the problem. +It may indicate that either the archive is damaged or it might not be compressed with XZ or LZMA(2) at all.

    @@ -217,7 +218,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Declaration

    Swift

    -
    public static func unarchive(archiveData data: Data) throws -> Data
    +
    public static func unarchive(archive data: Data) throws -> Data
    @@ -228,12 +229,12 @@ It may indicate that either the data is damaged or it might not be compressed wi - archiveData + archive
    -

    Data compressed with xz.

    +

    Data archived using XZ format.

    @@ -245,7 +246,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Unarchived data.

    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZipContainer.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZipContainer.html index cd31f8ff..0fa4556b 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZipContainer.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZipContainer.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,7 +176,7 @@ -

    Provides function which opens ZIP archives (containers).

    +

    Provides open function for ZIP containers.

    @@ -188,9 +188,9 @@
  • - - - open(containerData:) + + + open(container:)
    @@ -198,27 +198,20 @@
    -

    Processes ZIP archive (container) and returns an array of ContainerEntries (which are actually ZipEntries). -First member of a tuple is entry’s name, second member is entry’s data.

    +

    Processes ZIP container and returns an array of ContainerEntries (which are actually ZipEntries).

    Important

    -

    The order of entries is defined by ZIP archive and, particularly, creator of given ZIP container. +

    The order of entries is defined by ZIP container and, +particularly, by a creator of a given ZIP container. It is likely that directories will be encountered earlier than files stored in those directories, -but one SHOULD NOT assume that this is the case.

    - -
    -
    -

    Note

    -

    Currently, there is no universal (platform and file system independent) method to determine if entry is a directory. -One can check this by looking at the size of entry’s data (it should be 0 for directory) AND -the last character of entry’s name (it should be ‘/’). If all of these is true then entry is likely to be a directory.

    +but one SHOULD NOT rely on any particular order.

    Throws

    ZipError or any other error associated with compression type, -depending on the type of inconsistency in data. -It may indicate that either the container is damaged or it might not be ZIP container at all.

    +depending on the type of the problem. +It may indicate that either container is damaged or it might not be ZIP container at all.

    @@ -227,7 +220,7 @@ It may indicate that either the container is damaged or it might not be ZIP cont

    Declaration

    Swift

    -
    public static func open(containerData: Data) throws -> [ContainerEntry]
    +
    public static func open(container data: Data) throws -> [ContainerEntry]
    @@ -238,12 +231,12 @@ It may indicate that either the container is damaged or it might not be ZIP cont - containerData + container
    -

    Data of ZIP container.

    +

    ZIP container’s data.

    @@ -252,10 +245,10 @@ It may indicate that either the container is damaged or it might not be ZIP cont

    Return Value

    -

    Array of pairs ZipEntries as an array of ContainerEntries.

    +

    Array of ZipEntry as an array of ContainerEntry.

    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZipEntry.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZipEntry.html index a0976478..0ec16e22 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZipEntry.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZipEntry.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,7 +176,7 @@ -

    Represents either a file or directory entry inside ZIP archive.

    +

    Represents either a file or directory entry in ZIP container.

    @@ -210,7 +210,7 @@ @@ -240,7 +240,7 @@ @@ -258,7 +258,7 @@
    -

    File or directory attributes related to the file system of archive’s creator.

    +

    File or directory attributes related to the file system of the container’s creator.

    @@ -270,7 +270,7 @@
    @@ -288,19 +288,19 @@
    -

    Undocumented

    +

    Size of the data associated with the entry.

    Declaration

    Swift

    -
    public class ZipEntry: ContainerEntry
    +
    public var size: Int
    @@ -318,8 +318,9 @@
    -

    True, if an entry is likely to be a directory. -Particularly, it is true if size of data is 0 and last character of entry’s name is ‘/’.

    +

    True, if an entry is a directory. +For MS-DOS and UNIX-like container creator’s OS, the result is based on ‘external file attributes’. +Otherwise, it is true if size of data is 0 AND last character of entry’s name is ‘/’.

    @@ -331,7 +332,7 @@ Particularly, it is true if size of data is 0 and last character of entry’
    @@ -350,17 +351,10 @@ Particularly, it is true if size of data is 0 and last character of entry’

    Returns data associated with this entry.

    -
    -

    Note

    -

    Returned Data object with the size of 0 can either indicate that the entry is an empty file -or it is a directory.

    - -

    Throws

    -

    ZipError or any other error associated with compression type, -depending on the type of inconsistency in data. -An error can indicate that the container is damaged.

    + ZipError or any other error associated with compression type, +depending on the type of the problem. An error can indicate that container is damaged.
    @@ -374,7 +368,7 @@ An error can indicate that the container is damaged.

    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZlibArchive.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZlibArchive.html index c703621d..f6e07165 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZlibArchive.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZlibArchive.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -172,11 +172,11 @@

    ZlibArchive

    -
    public final class ZlibArchive: Archive
    +
    public class ZlibArchive: Archive
    -

    Provides unarchive function for Zlib archives.

    +

    Provides unarchive and archive functions for Zlib archives.

    @@ -188,9 +188,9 @@
  • - - - unarchive(archiveData:) + + + unarchive(archive:)
    @@ -198,11 +198,11 @@
    -

    Unarchives Zlib archive stored in archiveData.

    +

    Unarchives Zlib archive.

    -

    If data passed is not actually a zlib archive, ZlibError will be thrown.

    +

    If data passed is not actually a Zlib archive, ZlibError will be thrown.

    -

    If data inside the archive is not actually compressed with DEFLATE algorithm, DeflateError will be thrown.

    +

    If data in archive is not actually compressed with Deflate algorithm, DeflateError will be thrown.

    Note

    This function is specification compliant.

    @@ -210,8 +210,9 @@

    Throws

    -

    DeflateError or ZlibError depending on the type of inconsistency in data. -It may indicate that either the data is damaged or it might not be compressed with zlib or DEFLATE at all.

    +

    DeflateError or ZlibError depending on the type of the problem. +It may indicate that either archive is damaged or +it might not be archived with Zlib or compressed with Deflate at all.

    @@ -220,7 +221,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Declaration

    Swift

    -
    public static func unarchive(archiveData data: Data) throws -> Data
    +
    public static func unarchive(archive data: Data) throws -> Data
    @@ -231,12 +232,12 @@ It may indicate that either the data is damaged or it might not be compressed wi - archiveData + archive
    -

    Data compressed with zlib.

    +

    Data archived with Zlib.

    @@ -248,7 +249,7 @@ It may indicate that either the data is damaged or it might not be compressed wi

    Unarchived data.

    @@ -266,8 +267,9 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Archives data into Zlib archive. Data will be also compressed with DEFLTATE algorithm. -It will be specified in archive’s header that the compressor used slowest DEFLATE algorithm.

    +

    Archives data into Zlib archive. +Data will be also compressed with Deflate algorithm. +It will also be specified in archive’s header that the compressor used the slowest Deflate algorithm.

    If during compression something goes wrong DeflateError will be thrown.

    @@ -311,10 +313,10 @@ It will be specified in archive’s header that the compressor used slowest

    Return Value

    -

    Data object with resulting archive.

    +

    Resulting archive’s data.

    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums.html index 6766e027..816aaf55 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums.html @@ -22,7 +22,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -191,16 +191,8 @@

    -

    Error happened during LZMA2 decompression. -It may indicate that either the data is damaged or it might not be compressed with LZMA2 at all.

    - -
      -
    • wrongProperties: reserved bits of LZMA2 properties byte weren’t zero.
    • -
    • wrongDictionarySize: dictionary size was greater than 2^32.
    • -
    • wrongControlByte: unsupported value of LZMA2 packet’s control byte.
    • -
    • wrongReset: unsupported ‘reset’ value of LZMA2 packet’s.
    • -
    • wrongSizes: size of compressed or decompressed data wasn’t the same as specified in LZMA2 packet.
    • -
    +

    Represents an error, which happened during LZMA2 decompression. +It may indicate that either data is damaged or it might not be compressed with LZMA2 at all.

    See more
    @@ -213,7 +205,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -235,19 +227,8 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Error happened during unarchiving gzip archive. -It may indicate that either the data is damaged or it might not be gzip archive at all.

    - -
      -
    • wrongMagic: first two bytes of archive were not 31 and 139.
    • -
    • wrongCompressionMethod: unsupported compression method (not 8 aka Deflate).
    • -
    • wrongFlags: unsupported flags (reserved flags weren’t 0).
    • -
    • wrongHeaderCRC: computed Cyclic Redundancy Check of archive’s header - didn’t match the archive’s value.
    • -
    • wrongCRC: computed Cyclic Redundancy Check of uncompressed data didn’t match the archive’s value. -Associated value contains already decompressed data.
    • -
    • wrongISize: size of uncompressed data modulo 2^32 didn’t match the archive’s value.
    • -
    +

    Represents an error, which happened during processing GZip archive. +It may indicate that either archive is damaged or it might not be GZip archive at all.

    See more
    @@ -260,7 +241,7 @@ Associated value contains already decompressed data.
  • - Show on GitHub + Show on GitHub
    @@ -282,22 +263,8 @@ Associated value contains already decompressed data.
    -

    Error happened during processing ZIP archive (container). -It may indicate that either the data is damaged or it might not be ZIP archive (container) at all.

    - -
      -
    • notFoundCentralDirectoryEnd: end of Central Directoty record wasn’t found.
    • -
    • wrongSignature: unsupported signature of one of ZIP container’s structures.
    • -
    • wrongSize: incorrect compressed or uncompressed size of a ZIP container’s entry’s data.
    • -
    • wrongVersion: unsupported number of version needed to extract ZIP container -(unsupported features are required to open this file).
    • -
    • multiVolumesNotSupported: unsupported feature: multi-volumed or spanned container.
    • -
    • encryptionNotSupported: unsupported feature: encryption.
    • -
    • patchingNotSupported: unsupported feature: patched data.
    • -
    • compressionNotSupported: unsupported feature: specified compression method.
    • -
    • wrongLocalHeader: local header of an entry wasn’t consistent with Central Directory record.
    • -
    • wrongCRC32: computed checksum of entry’s data wasn’t the same as the one stored in container.
    • -
    +

    Represents an error, which happened during processing ZIP container. +It may indicate that either container is damaged or it might not be ZIP container at all.

    See more
    @@ -310,7 +277,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    @@ -332,21 +299,8 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    -

    Error happened during LZMA decompression. -It may indicate that either the data is damaged or it might not be compressed with LZMA at all.

    - -
      -
    • wrongProperties: unsupported LZMA properties (greater than 225).
    • -
    • rangeDecoderInitError: unable to initialize RangedDecoder.
    • -
    • exceededUncompressedSize: the number of uncompressed bytes reached amount specified by archive -while decoding wasn’t finished.
    • -
    • windowIsEmpty: unable to repeat bytes because there is nothing to repeat.
    • -
    • rangeDecoderFinishError: range decoder was in a bad state when finish marker was reached.
    • -
    • repeatWillExceed: unable to repeat bytes because the number of bytes to repeat is greater -than the amount bytes that is left to decode.
    • -
    • notEnoughToRepeat: unable to repeat bytes because the amount of already decoded bytes is smaller -than the repeat length.
    • -
    +

    Represents an error, which happened during LZMA decompression. +It may indicate that either data is damaged or it might not be compressed with LZMA at all.

    See more
    @@ -359,7 +313,7 @@ than the repeat length.
    @@ -381,17 +335,8 @@ than the repeat length.
    -

    Error happened during unarchiving Zlib archive. -It may indicate that either the data is damaged or it might not be Zlib archive at all.

    - -
      -
    • wrongCompressionMethod: unsupported compression method (not 8).
    • -
    • wrongCompressionInfo: unsupported compression info (greater than 7).
    • -
    • wrongFcheck: first two bytes were inconsistent with each other.
    • -
    • wrongCompressionLevel: unsupported compression level (not 0, 1, 2 or 3).
    • -
    • WrongAdler32: computed Adler-32 checksum of uncompressed data didn’t match the archive’s value. -Associated value contains already decompressed data.
    • -
    +

    Represents an error, which happened during processing Zlib archive. +It may indicate that either archive is damaged or it might not be Zlib archive at all.

    See more
    @@ -404,7 +349,7 @@ Associated value contains already decompressed data.
    @@ -426,15 +371,8 @@ Associated value contains already decompressed data.
    -

    Error happened during deflate decompression. -It may indicate that either the data is damaged or it might not be compressed with DEFLATE at all.

    - -
      -
    • wrongUncompressedBlockLengths: length and nlength bytes of uncompressed block were not compatible.
    • -
    • wrongBlockType: unsupported block type (not 0, 1 or 2).
    • -
    • wrongSymbol: unsupported Huffman tree’s symbol.
    • -
    • symbolNotFound: symbol from input data was not found in Huffman tree.
    • -
    +

    Represents an error, which happened during Deflate compression or decompression. +It may indicate that either the data is damaged or it might not be compressed with Deflate at all.

    See more
    @@ -447,7 +385,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -469,21 +407,8 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Error happened during bzip2 decompression. -It may indicate that either the data is damaged or it might not be compressed with BZip2 at all.

    - -
      -
    • wrongMagic: unsupported magic number (not 0x425a).
    • -
    • wrongCompressionMethod: unsupported compression method (not type ‘h’).
    • -
    • wrongBlockSize: unsupported block size (not ‘0’ — ‘9’).
    • -
    • wrongBlockType: unsupported block type (not ‘pi’ or ‘sqrt(pi)’).
    • -
    • randomizedBlock: block is randomized; this is not supported.
    • -
    • wrongHuffmanGroups: unsupported number of Huffman tables/groups (not between 2 and 6).
    • -
    • wrongSelector: unsupported selector (greater than total number of Huffman groups).
    • -
    • wrongHuffmanLengthCode: unsupported code for Huffman length (not between 0 and 20).
    • -
    • symbolNotFound: symbol from input data was not found in Huffman tree.
    • -
    • wrongCRC: computed Cyclic Redundancy Check of uncompressed data didn’t match the archive’s value.
    • -
    +

    Represents an error, which happened during BZip2 decompression. +It may indicate that either data is damaged or it might not be compressed with BZip2 at all.

    See more
    @@ -496,7 +421,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -518,12 +443,8 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Error happened during processing TAR archive (container). -It may indicate that either the data is damaged or it might not be TAR archive (container) at all.

    - -
      -
    • error: error description.
    • -
    +

    Represents an error, which happened during processing TAR container. +It may indicate that either container is damaged or it might not be TAR container at all.

    See more
    @@ -536,7 +457,7 @@ It may indicate that either the data is damaged or it might not be TAR archive (
    @@ -558,23 +479,8 @@ It may indicate that either the data is damaged or it might not be TAR archive (
    -

    Error happened during unarchiving XZ archive. -It may indicate that either the data is damaged or it might not be XZ archive at all.

    - -
      -
    • wrongMagic: ‘magic’ bytes in archive’s header or footer weren’t equal to predefined value.
    • -
    • wrongArchiveInfo: incorrect value of one of archive’s special field (in block, index, header or footer).
    • -
    • fieldReservedValue: value of one of archive’s special field -(in block, index, header or footer) had reserved value.
    • -
    • wrongInfoCRC: incorrect value of one of archive’s special field (in block, index, header or footer).
    • -
    • wrongFilterID: unsupported value of filter ID (not LZMA2’s 0x21).
    • -
    • checkTypeSHA256: checksum’s type was SHA-256.
    • -
    • wrongDataSize: size of compressed or decompressed data wasn’t the same as specified in block.
    • -
    • wrongCheck: computed checksum of uncompressed data didn’t match the archive’s value. -Associated value contains already decompressed data.
    • -
    • wrongPadding: unsupported padding of one of structures in the archive.
    • -
    • multiByteIntegerError: error happened during reading of one of so called ‘multi-byte’ numbers.
    • -
    +

    Represents an error, which happened during unarchiving XZ archive. +It may indicate that either archive is damaged or it might not be XZ archive at all.

    See more
    @@ -587,7 +493,7 @@ Associated value contains already decompressed data.
    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/BZip2Error.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/BZip2Error.html index 319fa64d..a5bfdd2f 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/BZip2Error.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/BZip2Error.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,21 +176,8 @@ -

    Error happened during bzip2 decompression. -It may indicate that either the data is damaged or it might not be compressed with BZip2 at all.

    - - +

    Represents an error, which happened during BZip2 decompression. +It may indicate that either data is damaged or it might not be compressed with BZip2 at all.

    @@ -212,7 +199,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Magic number was not 0x425a.

    +

    ‘Magic’ number is not 0x425a.

    @@ -224,7 +211,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -246,7 +233,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Compression method was not type ‘h’ (not Huffman).

    +

    Compression method is not type ‘h’ (not Huffman).

    @@ -258,7 +245,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -280,7 +267,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Unknown block size (not from ‘0’ to ‘9’).

    +

    Unsupported block size (not from ‘0’ to ‘9’).

    @@ -292,7 +279,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -314,7 +301,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Unknown block type (was neither ‘pi’ nor ‘sqrt(pi)’).

    +

    Unsupported block type (is neither ‘pi’ nor ‘sqrt(pi)’).

    @@ -326,7 +313,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -360,7 +347,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    - Show on GitHub + Show on GitHub
    @@ -394,7 +381,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    - Show on GitHub + Show on GitHub
    @@ -416,7 +403,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Selector was greater than total number of Huffman tables/groups.

    +

    Selector is greater than the total number of Huffman tables/groups.

    @@ -428,7 +415,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -462,7 +449,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    - Show on GitHub + Show on GitHub
    @@ -484,7 +471,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Symbol was not found in Huffman tree.

    +

    Symbol wasn’t found in Huffman tree.

    @@ -496,7 +483,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -518,8 +505,8 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Computed CRC of uncompressed data didn’t match the value stored in the archive. -Associated value contains already decompressed data.

    +

    Computed checksum of uncompressed data doesn’t match the value stored in archive. +Associated value of the error contains already decompressed data.

    @@ -531,7 +518,7 @@ Associated value contains already decompressed data.

    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/DeflateError.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/DeflateError.html index e7ebdcf9..ad715075 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/DeflateError.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/DeflateError.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,15 +176,8 @@ -

    Error happened during deflate decompression. -It may indicate that either the data is damaged or it might not be compressed with DEFLATE at all.

    - - +

    Represents an error, which happened during Deflate compression or decompression. +It may indicate that either the data is damaged or it might not be compressed with Deflate at all.

    @@ -206,7 +199,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Uncompressed block’ length and nlength bytes were not compatible.

    +

    Uncompressed block’s length and nlength bytes isn’t consistent with each other.

    @@ -218,7 +211,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -240,7 +233,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Unknown block type (not from 0 to 2).

    +

    Unknown block type (not 0, 1 or 2).

    @@ -252,7 +245,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -286,7 +279,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    - Show on GitHub + Show on GitHub
    @@ -308,7 +301,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Symbol was not found in Huffman tree.

    +

    Symbol wasn’t found in Huffman tree.

    @@ -320,7 +313,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/GzipError.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/GzipError.html index 54abc734..0db3728c 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/GzipError.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/GzipError.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,19 +176,8 @@ -

    Error happened during unarchiving gzip archive. -It may indicate that either the data is damaged or it might not be gzip archive at all.

    - - +

    Represents an error, which happened during processing GZip archive. +It may indicate that either archive is damaged or it might not be GZip archive at all.

    @@ -210,7 +199,7 @@ Associated value contains already decompressed data.
    -

    First two bytes of archive were not 31 and 139.

    +

    First two bytes (‘magic’ number) of archive isn’t 31 and 139.

    @@ -222,7 +211,7 @@ Associated value contains already decompressed data.
    @@ -244,7 +233,7 @@ Associated value contains already decompressed data.
    -

    Compression method was other than 8 which is the only supported one.

    +

    Compression method used in archive is different from Deflate, which is the only supported one.

    @@ -256,7 +245,7 @@ Associated value contains already decompressed data.
    @@ -278,7 +267,8 @@ Associated value contains already decompressed data.
    -

    Reserved flags bits were not equal to 0.

    +

    One of the reserved fields in archive has an unexpected value, which can also mean (apart from damaged archive), +that archive uses a newer version of GZip format.

    @@ -290,7 +280,7 @@ Associated value contains already decompressed data.
    @@ -312,7 +302,7 @@ Associated value contains already decompressed data.
    -

    Computed CRC of header didn’t match the value stored in the archive.

    +

    Computed CRC of archive’s header doesn’t match the value stored in archive.

    @@ -324,7 +314,7 @@ Associated value contains already decompressed data.
    @@ -346,8 +336,8 @@ Associated value contains already decompressed data.
    -

    Computed CRC of uncompressed data didn’t match the value stored in the archive. -Associated value contains already decompressed data.

    +

    Computed checksum of uncompressed data doesn’t match the value stored in archive. +Associated value of the error contains already decompressed data.

    @@ -359,7 +349,7 @@ Associated value contains already decompressed data.

    @@ -381,7 +371,7 @@ Associated value contains already decompressed data.

    -

    Computed isize didn’t match the value stored in the archive.

    +

    Computed ‘isize’ didn’t match the value stored in the archive.

    @@ -393,7 +383,41 @@ Associated value contains already decompressed data.

    +
    + + + + +
    +
    -

    Error happened during LZMA2 decompression. -It may indicate that either the data is damaged or it might not be compressed with LZMA2 at all.

    - - +

    Represents an error, which happened during LZMA2 decompression. +It may indicate that either data is damaged or it might not be compressed with LZMA2 at all.

    @@ -207,7 +199,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Reserved bits of LZMA2 properties byte were not equal to zero.

    +

    Reserved bits of LZMA2 properties’ byte aren’t equal to zero.

    @@ -219,7 +211,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -241,7 +233,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Dictionary size was too big.

    +

    Dictionary size is too big.

    @@ -253,7 +245,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -287,7 +279,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    - Show on GitHub + Show on GitHub
    @@ -309,7 +301,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Unknown reset instruction encounetered in LZMA2 packet.

    +

    Unknown reset instruction encountered in LZMA2 packet.

    @@ -321,7 +313,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    @@ -343,8 +335,8 @@ It may indicate that either the data is damaged or it might not be compressed wi
    -

    Either size of decompressed data was not equal to specified one in LZMA2 packet or -amount of compressed data read was different from the one stored in LZMA2 packet.

    +

    Either size of decompressed data isn’t equal to the one specified in LZMA2 packet or +amount of compressed data read is different from the one stored in LZMA2 packet.

    @@ -356,7 +348,7 @@ amount of compressed data read was different from the one stored in LZMA2 packet
    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/LZMAError.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/LZMAError.html index 3aed164a..645625fe 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/LZMAError.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/LZMAError.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,21 +176,8 @@ -

    Error happened during LZMA decompression. -It may indicate that either the data is damaged or it might not be compressed with LZMA at all.

    - - +

    Represents an error, which happened during LZMA decompression. +It may indicate that either data is damaged or it might not be compressed with LZMA at all.

    @@ -212,7 +199,7 @@ than the repeat length.
    -

    Properties byte was greater than 225.

    +

    Properties’ byte is greater than 225.

    @@ -224,7 +211,7 @@ than the repeat length.
    @@ -258,7 +245,7 @@ than the repeat length.
    - Show on GitHub + Show on GitHub
    @@ -280,7 +267,7 @@ than the repeat length.
    -

    The number of uncompressed bytes hit limit in the middle of decoding.

    +

    Size of uncompressed data hit specified limit in the middle of decoding.

    @@ -292,7 +279,7 @@ than the repeat length.
    @@ -326,7 +313,7 @@ than the repeat length.
    - Show on GitHub + Show on GitHub
    @@ -360,7 +347,7 @@ than the repeat length.
    - Show on GitHub + Show on GitHub
    @@ -394,7 +381,7 @@ than the repeat length.
    - Show on GitHub + Show on GitHub
    @@ -428,7 +415,41 @@ than the repeat length.
    - Show on GitHub + Show on GitHub +
    + + + + + +
    +
    -

    Error happened during processing TAR archive (container). -It may indicate that either the data is damaged or it might not be TAR archive (container) at all.

    - - +

    Represents an error, which happened during processing TAR container. +It may indicate that either container is damaged or it might not be TAR container at all.

    @@ -203,19 +199,19 @@ It may indicate that either the data is damaged or it might not be TAR archive (
    -

    Undocumented

    +

    Size of data is too small, even to contain only one header.

    Declaration

    Swift

    -
    public enum TarError: Error
    +
    case tooSmallFileIsPassed
    @@ -237,19 +233,19 @@ It may indicate that either the data is damaged or it might not be TAR archive (
    -

    Undocumented

    +

    Failed to process a field as a number.

    Declaration

    Swift

    -
    public enum TarError: Error
    +
    case fieldIsNotNumber
    @@ -271,19 +267,19 @@ It may indicate that either the data is damaged or it might not be TAR archive (
    -

    Undocumented

    +

    Computed checksum of a header doesn’t match the value stored in container.

    Declaration

    Swift

    -
    public enum TarError: Error
    +
    case wrongHeaderChecksum
    @@ -305,19 +301,19 @@ It may indicate that either the data is damaged or it might not be TAR archive (
    -

    Undocumented

    +

    Unsupported version of USTAR format.

    Declaration

    Swift

    -
    public enum TarError: Error
    +
    case wrongUstarVersion
    @@ -339,19 +335,53 @@ It may indicate that either the data is damaged or it might not be TAR archive (
    -

    Undocumented

    +

    Entry from PAX extended header is in incorrect format.

    Declaration

    Swift

    -
    public enum TarError: Error
    +
    case wrongPaxHeaderEntry
    +
    + + + + +
    +
    -

    Error happened during unarchiving XZ archive. -It may indicate that either the data is damaged or it might not be XZ archive at all.

    - - +

    Represents an error, which happened during unarchiving XZ archive. +It may indicate that either archive is damaged or it might not be XZ archive at all.

    @@ -214,7 +199,7 @@ Associated value contains already decompressed data.
    -

    Either magic number in header or footer was not equal to predefined value.

    +

    Either ‘magic’ number in header or footer isn’t equal to a predefined value.

    @@ -226,7 +211,7 @@ Associated value contains already decompressed data.
    @@ -238,9 +223,9 @@ Associated value contains already decompressed data.
  • - - - wrongArchiveInfo + + + wrongFieldValue
    @@ -248,19 +233,19 @@ Associated value contains already decompressed data.
  • -

    One of special fields of archive had an incorrect value.

    +

    One of the fields in archive has an incorrect value.

    Declaration

    Swift

    -
    case wrongArchiveInfo
    +
    case wrongFieldValue
    @@ -282,7 +267,8 @@ Associated value contains already decompressed data.
    -

    One of special fields of archive had a reserved value.

    +

    One of the reserved fields in archive has an unexpected value, which can also mean (apart from damaged archive), +that archive uses a newer version of XZ format.

    @@ -294,7 +280,7 @@ Associated value contains already decompressed data.
    @@ -316,7 +302,7 @@ Associated value contains already decompressed data.
    -

    Checksum of one of special fields of archive was incorrect.

    +

    Checksum of one of the fields of archive doesn’t match the value stored in archive.

    @@ -328,7 +314,7 @@ Associated value contains already decompressed data.
    @@ -350,7 +336,7 @@ Associated value contains already decompressed data.
    -

    ID of filter(s) used in archvie was unsupported.

    +

    Filter used in archvie is unsupported.

    @@ -362,7 +348,7 @@ Associated value contains already decompressed data.
    @@ -384,7 +370,7 @@ Associated value contains already decompressed data.
    -

    Type of checksum of archive was SHA-256.

    +

    Archive uses SHA-256 checksum which is unsupported.

    @@ -396,7 +382,7 @@ Associated value contains already decompressed data.
    @@ -418,8 +404,8 @@ Associated value contains already decompressed data.
    -

    Either size of decompressed data was not equal to specified one in block header or -amount of compressed data read was different from the one stored in block header.

    +

    Either size of decompressed data isn’t equal to the one specified in archive or +amount of compressed data read is different from the one stored in archive.

    @@ -431,7 +417,7 @@ amount of compressed data read was different from the one stored in block header
    @@ -453,8 +439,8 @@ amount of compressed data read was different from the one stored in block header
    -

    Computed checksum of uncompressed data didn’t match the value stored in the archive. -Associated value contains already decompressed data.

    +

    Computed checksum of uncompressed data doesn’t match the value stored in the archive. +Associated value of the error contains already decompressed data.

    @@ -466,7 +452,7 @@ Associated value contains already decompressed data.

    @@ -488,7 +474,7 @@ Associated value contains already decompressed data.

    -

    Unsupported padding of a structure in the archive.

    +

    Padding (null-bytes appended to an archive’s structure) is incorrect.

    @@ -500,7 +486,7 @@ Associated value contains already decompressed data.

    @@ -534,7 +520,7 @@ Associated value contains already decompressed data.

    - Show on GitHub + Show on GitHub
    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZipError.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZipError.html index 047dfc95..e74bfd4e 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZipError.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZipError.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,22 +176,8 @@ -

    Error happened during processing ZIP archive (container). -It may indicate that either the data is damaged or it might not be ZIP archive (container) at all.

    - - +

    Represents an error, which happened during processing ZIP container. +It may indicate that either container is damaged or it might not be ZIP container at all.

    @@ -213,7 +199,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    -

    End of Central Directoty record was not found.

    +

    End of Central Directoty record wasn’t found.

    @@ -225,7 +211,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    @@ -247,7 +233,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    -

    Wrong signature of one of ZIP container’s structures.

    +

    Wrong signature of one of container’s structures.

    @@ -259,7 +245,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    @@ -281,7 +267,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    -

    Wrong either compressed or uncompressed size of a ZIP container’s entry.

    +

    Wrong either compressed or uncompressed size of a container’s entry.

    @@ -293,7 +279,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    @@ -315,7 +301,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    -

    Wrong number of version needed to extract ZIP container.

    +

    Version needed to process container is unsupported.

    @@ -327,7 +313,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    @@ -349,7 +335,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    -

    Archive either spanned or consists of several volumes. This feature is not supported.

    +

    Container is either spanned or consists of several volumes. These features aren’t supported.

    @@ -361,7 +347,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    @@ -383,7 +369,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    -

    Entry or record is encrypted. This feature is not supported.

    +

    Entry or record is encrypted. This feature isn’t supported.

    @@ -395,7 +381,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    @@ -417,7 +403,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    -

    Entry contains patched data. This feature is not supported.

    +

    Entry contains patched data. This feature isn’t supported.

    @@ -429,7 +415,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    @@ -451,7 +437,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    -

    Wrong compression method of an entry.

    +

    Entry is compressed using unsupported compression method.

    @@ -463,7 +449,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    @@ -485,7 +471,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    -

    Wrong local header of an entry.

    +

    Local header of an entry is inconsistent with Central Directory.

    @@ -497,7 +483,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    @@ -519,8 +505,8 @@ It may indicate that either the data is damaged or it might not be ZIP archive (
    -

    Computed CRC32 of entry’s data didn’t match the value stored in the container. -Associated value contains extracted data.

    +

    Computed checksum of entry’s data doesn’t match the value stored in container. +Associated value of the error contains entry’s data.

    @@ -532,7 +518,7 @@ Associated value contains extracted data.

    @@ -554,19 +540,19 @@ Associated value contains extracted data.

    -

    Undocumented

    +

    Either entry’s comment or file name cannot be processed using UTF-8 encoding.

    Declaration

    Swift

    -
    public enum ZipError: Error
    +
    case wrongTextField
    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZlibError.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZlibError.html index 665a6523..61f3e13f 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZlibError.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZlibError.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,17 +176,8 @@ -

    Error happened during unarchiving Zlib archive. -It may indicate that either the data is damaged or it might not be Zlib archive at all.

    - - +

    Represents an error, which happened during processing Zlib archive. +It may indicate that either archive is damaged or it might not be Zlib archive at all.

    @@ -208,7 +199,7 @@ Associated value contains already decompressed data.
    -

    Compression method was other than 8 which is the only supported one.

    +

    Compression method used in archive is different from Deflate, which is the only supported one.

    @@ -220,7 +211,7 @@ Associated value contains already decompressed data.
    @@ -242,7 +233,7 @@ Associated value contains already decompressed data.
    -

    Compression info was greater than 7 which is uncompatible number 8 compression method.

    +

    Compression info has value incompatible with Deflate compression method.

    @@ -254,7 +245,7 @@ Associated value contains already decompressed data.
    @@ -276,7 +267,7 @@ Associated value contains already decompressed data.
    -

    First two bytes were inconsistent with each other.

    +

    First two bytes of archive’s flags are inconsistent with each other.

    @@ -288,7 +279,7 @@ Associated value contains already decompressed data.
    @@ -310,7 +301,7 @@ Associated value contains already decompressed data.
    -

    Compression level was other than 0, 1, 2, 3.

    +

    Compression level has value, which is different from the supported ones.

    @@ -322,7 +313,7 @@ Associated value contains already decompressed data.
    @@ -344,8 +335,8 @@ Associated value contains already decompressed data.
    -

    Computed Adler-32 sum of uncompressed data didn’t match the value stored in the archive. -Associated value contains already decompressed data.

    +

    Computed checksum of uncompressed data doesn’t match the value stored in archive. +Associated value of the error contains already decompressed data.

    @@ -357,7 +348,7 @@ Associated value contains already decompressed data.

    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols.html index 6375a356..b49937fe 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols.html @@ -22,7 +22,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -191,7 +191,7 @@

    -

    Abstract archive class which supports unarchiving.

    +

    A type that represents an archive.

    See more
    @@ -204,7 +204,7 @@
    @@ -222,7 +222,7 @@
    -

    Abstract decompression algorithm class which supports decompression.

    +

    A type that provides an implementation of a particular decompression algorithm.

    See more
    @@ -235,7 +235,7 @@
    @@ -253,12 +253,20 @@
    -

    Undocumented

    +

    A type that represents a container of files, directories and/or other data.

    See more
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol Container
    + +
    +
    @@ -276,12 +284,20 @@
    -

    Undocumented

    +

    A type that represents an entry from a container (file or directory) with attributes.

    See more
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol ContainerEntry
    + +
    +
    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/Archive.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/Archive.html index 04d2e675..3b330cb5 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/Archive.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/Archive.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,7 +176,7 @@ -

    Abstract archive class which supports unarchiving.

    +

    A type that represents an archive.

    @@ -188,9 +188,9 @@
  • - - - unarchive(archiveData:) + + + unarchive(archive:)
    @@ -198,19 +198,19 @@
    -

    Abstract unarchive function.

    +

    Unarchive data from the archive.

    Declaration

    Swift

    -
    static func unarchive(archiveData: Data) throws -> Data
    +
    static func unarchive(archive: Data) throws -> Data
    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/Container.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/Container.html index 51bedd79..70158a29 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/Container.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/Container.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -170,7 +170,13 @@

    Container

    -

    Undocumented

    +
    +
    +
    public protocol Container
    + +
    +
    +

    A type that represents a container of files, directories and/or other data.

    @@ -182,9 +188,9 @@
  • - - - open(containerData:) + + + open(container:)
    @@ -192,11 +198,19 @@
    -

    Undocumented

    +

    Retrieve all the entries from the container.

    +
    +

    Declaration

    +
    +

    Swift

    +
    static func open(container: Data) throws -> [ContainerEntry]
    + +
    +
    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/ContainerEntry.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/ContainerEntry.html index 83d16939..b7e9942d 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/ContainerEntry.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/ContainerEntry.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -170,7 +170,13 @@

    ContainerEntry

    -

    Undocumented

    +
    +
    +
    public protocol ContainerEntry
    + +
    +
    +

    A type that represents an entry from a container (file or directory) with attributes.

    @@ -192,11 +198,19 @@
    -

    Undocumented

    +

    Retrieve name of the entry from the container.

    +
    +

    Declaration

    +
    +

    Swift

    +
    var name: String
    + +
    +
    @@ -214,11 +228,19 @@
    -

    Undocumented

    +

    Retrieve size of the entry’s data from the container.

    +
    +

    Declaration

    +
    +

    Swift

    +
    var size: Int
    + +
    +
    @@ -236,11 +258,19 @@
    -

    Undocumented

    +

    Check if entry is a directory.

    +
    +

    Declaration

    +
    +

    Swift

    +
    var isDirectory: Bool
    + +
    +
    @@ -258,11 +288,19 @@
    -

    Undocumented

    +

    Retrieve entry’s data from the container.

    +
    +

    Declaration

    +
    +

    Swift

    +
    func data() throws -> Data
    + +
    +
    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/DecompressionAlgorithm.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/DecompressionAlgorithm.html index d9edaa85..3191ec43 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/DecompressionAlgorithm.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/DecompressionAlgorithm.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,7 +176,7 @@ -

    Abstract decompression algorithm class which supports decompression.

    +

    A type that provides an implementation of a particular decompression algorithm.

    @@ -188,9 +188,9 @@
  • - - - decompress(compressedData:) + + + decompress(data:)
    @@ -198,19 +198,19 @@
    -

    Abstract decompress function.

    +

    Decompress data compressed with particular algorithm.

    Declaration

    Swift

    -
    static func decompress(compressedData: Data) throws -> Data
    +
    static func decompress(data: Data) throws -> Data
    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs.html index 755e680d..b6d2ee06 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs.html @@ -22,7 +22,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -191,7 +191,7 @@

    -

    A structure which provides information about gzip archive.

    +

    Represents a GZip archive’s header.

    See more
    @@ -204,7 +204,7 @@
    @@ -226,7 +226,7 @@
    -

    A structure which provides information about zlib archive.

    +

    Represents a Zlib archive’s header.

    See more
    @@ -239,7 +239,7 @@
    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader.html index 80379478..9031ee75 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,7 +176,7 @@ -

    A structure which provides information about gzip archive.

    +

    Represents a GZip archive’s header.

    @@ -198,7 +198,7 @@
    -

    Supported compression methods in gzip archive.

    +

    Supported compression methods in GZip archive.

    See more
    @@ -211,7 +211,7 @@
    @@ -229,7 +229,7 @@
    -

    Type of file system on which gzip archive was created.

    +

    Type of file system on which GZip archive was created.

    See more
    @@ -242,7 +242,7 @@
    @@ -260,7 +260,7 @@
    -

    Compression method of archive. Always equals to .deflate.

    +

    Compression method of archive. Currently, always equals to .deflate.

    @@ -272,7 +272,7 @@
    @@ -290,7 +290,9 @@
    -

    The most recent modification time of the original file. If set to 0 (default value == unset), then nil.

    +

    The most recent modification time of the original file. +If corresponding archive’s field is set to 0, which means that no time was specified, +then this property is nil.

    @@ -302,7 +304,7 @@
    @@ -320,7 +322,7 @@
    -

    Type of file system on which compression took place.

    +

    Type of file system on which archivation took place.

    @@ -332,7 +334,7 @@
    @@ -340,9 +342,9 @@
  • - - - originalFileName + + + fileName
    @@ -350,19 +352,19 @@
    -

    Name of the original file.

    +

    Name of the original file. If archive doesn’t contain file’s name, then nil.

    Declaration

    Swift

    -
    public let originalFileName: String?
    +
    public let fileName: String?
    @@ -380,7 +382,7 @@
    -

    Comment inside the archive.

    +

    Comment stored in archive. If archive doesn’t contain any comment, then nil.

    @@ -392,7 +394,7 @@
    @@ -400,9 +402,9 @@
  • - - - init(archiveData:) + + + isTextFile
    @@ -410,13 +412,43 @@
    -

    Initializes the structure with the values of first ‘member’ in gzip archive presented in archiveData.

    +

    Check if file is likely to be text file or ASCII-file.

    -

    If data passed is not actually a gzip archive, GzipError will be thrown.

    +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let isTextFile: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(archive:) + +
    +
    +
    +
    +
    +
    +

    Initializes the structure with the values from the first ‘member’ of GZip archive.

    + +

    If data passed is not actually a GZip archive, GzipError will be thrown.

    Throws

    -

    GzipError. It may indicate that either the data is damaged or -it might not be compressed with gzip at all.

    +

    GzipError. It may indicate that either archive is damaged or +it might not be archived with GZip at all.

    @@ -425,7 +457,7 @@ it might not be compressed with gzip at all.

    Declaration

    Swift

    -
    public init(archiveData: Data) throws
    +
    public init(archive data: Data) throws
    @@ -436,12 +468,12 @@ it might not be compressed with gzip at all.

    - archiveData + archive
    -

    Data compressed with gzip.

    +

    Data archived with GZip.

    @@ -449,7 +481,7 @@ it might not be compressed with gzip at all.

    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader/CompressionMethod.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader/CompressionMethod.html index a75c1923..899545d9 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader/CompressionMethod.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader/CompressionMethod.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,7 +176,7 @@ -

    Supported compression methods in gzip archive.

    +

    Supported compression methods in GZip archive.

    @@ -210,7 +210,7 @@ diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader/FileSystemType.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader/FileSystemType.html index e8814fed..bf47adc2 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader/FileSystemType.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader/FileSystemType.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,7 +176,7 @@ -

    Type of file system on which gzip archive was created.

    +

    Type of file system on which GZip archive was created.

    @@ -198,7 +198,12 @@
    -

    One of many Linux systems. (It seems like modern macOS systems also fall into this category).

    +

    One of many UNIX-like systems.

    +
    +

    Note

    + It seems like modern macOS systems also fall into this category. + +
    @@ -210,7 +215,7 @@
    @@ -232,7 +237,7 @@
    -

    Older Macintosh (Mac OS, OS X) systems.

    +

    Older Macintosh systems.

    @@ -244,7 +249,7 @@
    @@ -278,7 +283,7 @@ @@ -312,7 +317,7 @@ @@ -334,7 +339,7 @@
    -

    File system was one of the rare systems..

    +

    File system is one of the rare systems.

    @@ -346,7 +351,7 @@
    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader.html index 61a5bf3f..933e2284 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,7 +176,7 @@ -

    A structure which provides information about zlib archive.

    +

    Represents a Zlib archive’s header.

    @@ -211,7 +211,7 @@ @@ -229,7 +229,7 @@
    -

    Levels of compression which can be used to create zlib archive.

    +

    Levels of compression which can be used to create Zlib archive.

    See more
    @@ -242,7 +242,7 @@
    @@ -260,7 +260,7 @@
    -

    Compression method of archive. Always equals to .deflate.

    +

    Compression method of archive. Currently, always equals to .deflate.

    @@ -272,7 +272,7 @@
    @@ -290,7 +290,7 @@
    -

    Level of compression in the archive.

    +

    Level of compression used in archive.

    @@ -302,7 +302,7 @@
    @@ -320,7 +320,7 @@
    -

    Size of ‘window’: moving interval of data which was used to make the archive

    +

    Size of ‘window’: moving interval of data which was used to make archive.

    @@ -332,7 +332,7 @@
    @@ -340,9 +340,9 @@
  • - - - init(archiveData:) + + + init(archive:)
    @@ -350,13 +350,13 @@
    -

    Initializes the structure with the values from zlib archive presented in archiveData.

    +

    Initializes the structure with the values from Zlib archive.

    -

    If data passed is not actually a zlib archive, ZlibError will be thrown.

    +

    If data passed is not actually a Zlib archive, ZlibError will be thrown.

    Throws

    -

    ZlibError. It may indicate that either the data is damaged or -it might not be compressed with zlib at all.

    +

    ZlibError. It may indicate that either archive is damaged or +it might not be archived with Zlib at all.

    @@ -365,7 +365,7 @@ it might not be compressed with zlib at all.

    Declaration

    Swift

    -
    public init(archiveData: Data) throws
    +
    public init(archive data: Data) throws
    @@ -376,12 +376,12 @@ it might not be compressed with zlib at all.

    - archiveData + archive
    -

    Data compressed with zlib.

    +

    Data archived with zlib.

    @@ -389,7 +389,7 @@ it might not be compressed with zlib at all.

    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader/CompressionLevel.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader/CompressionLevel.html index f0e28da0..21c22d48 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader/CompressionLevel.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader/CompressionLevel.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -176,7 +176,7 @@ -

    Levels of compression which can be used to create zlib archive.

    +

    Levels of compression which can be used to create Zlib archive.

    @@ -210,7 +210,7 @@ @@ -244,7 +244,7 @@ @@ -278,7 +278,7 @@ @@ -312,7 +312,7 @@ diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader/CompressionMethod.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader/CompressionMethod.html index c640d261..74298ff8 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader/CompressionMethod.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader/CompressionMethod.html @@ -23,7 +23,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -210,7 +210,7 @@

    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/index.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/index.html index 2d2a68f9..acd592b9 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/index.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/index.html @@ -22,7 +22,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -180,7 +180,7 @@

    CocoaPods Carthage compatible

    -

    A framework which contains implementations of (de)compression algorithms.

    +

    A framework which contains implementations of (de)compression algorithms and functions which parse various archives and containers.

    Developed with Swift.

    Why have you made this framework?

    @@ -203,7 +203,8 @@ And yes, it is also in Objective-C.

  • Containers:
  • Decompression algorithms: @@ -225,7 +226,7 @@ And yes, it is also in Objective-C.

  • Zlib
  • Platform independent.
  • -
  • Swift only.
  • +
  • Written with Swift only.
  • By the way, it seems like GZip, Deflate and Zlib implementations are specification compliant.

    @@ -246,6 +247,8 @@ Available subspecs:

  • SWCompression/Gzip
  • SWCompression/Zlib
  • SWCompression/BZip2
  • +
  • SWCompression/ZIP
  • +
  • SWCompression/TAR
  • You can add some or all of them instead of pod 'SWCompression'

    @@ -254,7 +257,8 @@ Available subspecs:

    To complete installation, run pod install.

    -

    Note: Actually, there is one more subspec (SWCompression/Common) but it does not contain any end-user functions. It is included in every other subspec and should not be specified directly in Podfile.

    +

    Note: Actually, there is one more subspec (SWCompression/Common) but it does not contain any end-user functions. +It is included in every other subspec and should not be specified directly in Podfile.

    Carthage

    Add to your Cartfile github "tsolomko/SWCompression".

    @@ -270,31 +274,41 @@ Available subspecs:

    let package = Package( name: "PackageName", dependencies: [ - .Package(url: "https://github.com/tsolomko/SWCompression.git", majorVersion: 2) + .Package(url: "https://github.com/tsolomko/SWCompression.git", majorVersion: 3) ] )

    More info about SPM you can find at Swift Package Manager’s Documentation.

    +

    SWCompression/ZIP and compression methods

    + +

    Deflate is a default compression method of ZIP containers.

    + +

    This means, that if you use CocoaPods, when installing SWCompression/ZIP it will install SWCompression/Deflate as a dependency.

    + +

    However, ZIP containers can also support LZMA and BZip2. +So if you want to enable them in your Pods configuration you need to include SWCompression/LZMA and/or SWCompression/Deflate.

    + +

    If you use Carthage or Swift Package Manager you always have the full package, +and ZIP will be built with both BZip2 and LZMA support.

    Usage

    Basics

    If you’d like to decompress deflated data just use:

    let data = try! Data(contentsOf: URL(fileURLWithPath: "path/to/file"),
                          options: .mappedIfSafe)
    -let decompressedData = try? Deflate.decompress(compressedData: data)
    +let decompressedData = try? Deflate.decompress(data: data)
     

    Note: It is highly recommended to specify Data.ReadingOptions.mappedIfSafe, -especially if you are working with large files, -so you don’t run out of system memory.

    +especially if you are working with large files, so you don’t run out of system memory.

    However, it is unlikely that you will encounter deflated data outside of any archive. So, in case of GZip archive you should use:

    let decompressedData = try? GzipArchive.unarchive(archiveData: data)
     
    -

    One final note: every unarchive/decompress function can throw an error and +

    One final note: every SWCompression function can throw an error and you are responsible for handling them.

    Documentation

    @@ -302,8 +316,7 @@ you are responsible for handling them.

    This documentation can be found at its own website.

    Handling Errors

    -

    If you look at list of available error types and their cases, -you may be frightened by their number. +

    If you look at list of available error types and their cases, you may be frightened by their number. However, most of these cases (such as XZError.WrongMagic) exist for diagnostic purposes.

    Thus, you only need to handle the most common type of error for your archive/algorithm. @@ -311,7 +324,7 @@ For example:

    do {
       let data = try Data(contentsOf: URL(fileURLWithPath: "path/to/file"),
                           options: .mappedIfSafe)
    -  let decompressedData = XZArchive.unarchive(archiveData: data)
    +  let decompressedData = XZArchive.unarchive(archive: data)
     } catch let error as XZError {
       <handle XZ related error here>
     } catch let error {
    @@ -340,7 +353,9 @@ so some difference in speed is expected.

    Future plans

      -
    • Tar unarchiving.
    • +
    • Better Deflate compression.
    • +
    • Support for additional attributes in containers.
    • +
    • 7zip containers.
    • BZip2 compression.
    • Something else…
    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/search.json b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/search.json index 0812255e..e6d82172 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/search.json +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/search.json @@ -1 +1 @@ -{"Structs/ZlibHeader/CompressionLevel.html#/s:FOV13SWCompression10ZlibHeader16CompressionLevel16fastestAlgorithmFMS1_S1_":{"name":"fastestAlgorithm","abstract":"

    Fastest algorithm.

    ","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html#/s:FOV13SWCompression10ZlibHeader16CompressionLevel13fastAlgorithmFMS1_S1_":{"name":"fastAlgorithm","abstract":"

    Fast algorithm.

    ","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html#/s:FOV13SWCompression10ZlibHeader16CompressionLevel16defaultAlgorithmFMS1_S1_":{"name":"defaultAlgorithm","abstract":"

    Default algorithm.

    ","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html#/s:FOV13SWCompression10ZlibHeader16CompressionLevel13slowAlgorithmFMS1_S1_":{"name":"slowAlgorithm","abstract":"

    Slowest algorithm but with maximum compression.

    ","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionMethod.html#/s:FOV13SWCompression10ZlibHeader17CompressionMethod7deflateFMS1_S1_":{"name":"deflate","abstract":"

    The only one supported compression method (Deflate).

    ","parent_name":"CompressionMethod"},"Structs/ZlibHeader/CompressionMethod.html":{"name":"CompressionMethod","abstract":"

    Supported compression methods in zlib archive.

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader/CompressionLevel.html":{"name":"CompressionLevel","abstract":"

    Levels of compression which can be used to create zlib archive.

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:vV13SWCompression10ZlibHeader17compressionMethodOS0_17CompressionMethod":{"name":"compressionMethod","abstract":"

    Compression method of archive. Always equals to .deflate.

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:vV13SWCompression10ZlibHeader16compressionLevelOS0_16CompressionLevel":{"name":"compressionLevel","abstract":"

    Level of compression in the archive.

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:vV13SWCompression10ZlibHeader10windowSizeSi":{"name":"windowSize","abstract":"

    Size of ‘window’: moving interval of data which was used to make the archive

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:FV13SWCompression10ZlibHeadercFzT11archiveDataV10Foundation4Data_S0_":{"name":"init(archiveData:)","abstract":"

    Initializes the structure with the values from zlib archive presented in archiveData.

    ","parent_name":"ZlibHeader"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType4unixFMS1_S1_":{"name":"unix","abstract":"

    One of many Linux systems. (It seems like modern macOS systems also fall into this category).

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType9macintoshFMS1_S1_":{"name":"macintosh","abstract":"

    Older Macintosh (Mac OS, OS X) systems.

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType4ntfsFMS1_S1_":{"name":"ntfs","abstract":"

    File system used in Microsoft™®© Windows™®©.

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType7unknownFMS1_S1_":{"name":"unknown","abstract":"

    File system was unknown to the archiver.

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType5otherFMS1_S1_":{"name":"other","abstract":"

    File system was one of the rare systems..

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/CompressionMethod.html#/s:FOV13SWCompression10GzipHeader17CompressionMethod7deflateFMS1_S1_":{"name":"deflate","abstract":"

    The only one supported compression method (Deflate).

    ","parent_name":"CompressionMethod"},"Structs/GzipHeader/CompressionMethod.html":{"name":"CompressionMethod","abstract":"

    Supported compression methods in gzip archive.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader/FileSystemType.html":{"name":"FileSystemType","abstract":"

    Type of file system on which gzip archive was created.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader17compressionMethodOS0_17CompressionMethod":{"name":"compressionMethod","abstract":"

    Compression method of archive. Always equals to .deflate.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader16modificationTimeGSqV10Foundation4Date_":{"name":"modificationTime","abstract":"

    The most recent modification time of the original file. If set to 0 (default value == unset), then nil.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader6osTypeOS0_14FileSystemType":{"name":"osType","abstract":"

    Type of file system on which compression took place.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader16originalFileNameGSqSS_":{"name":"originalFileName","abstract":"

    Name of the original file.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader7commentGSqSS_":{"name":"comment","abstract":"

    Comment inside the archive.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:FV13SWCompression10GzipHeadercFzT11archiveDataV10Foundation4Data_S0_":{"name":"init(archiveData:)","abstract":"

    Initializes the structure with the values of first ‘member’ in gzip archive presented in archiveData.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html":{"name":"GzipHeader","abstract":"

    A structure which provides information about gzip archive.

    "},"Structs/ZlibHeader.html":{"name":"ZlibHeader","abstract":"

    A structure which provides information about zlib archive.

    "},"Protocols/ContainerEntry.html#/s:vP13SWCompression14ContainerEntry4nameSS":{"name":"name","abstract":"

    Undocumented

    ","parent_name":"ContainerEntry"},"Protocols/ContainerEntry.html#/s:vP13SWCompression14ContainerEntry4sizeSi":{"name":"size","abstract":"

    Undocumented

    ","parent_name":"ContainerEntry"},"Protocols/ContainerEntry.html#/s:vP13SWCompression14ContainerEntry11isDirectorySb":{"name":"isDirectory","abstract":"

    Undocumented

    ","parent_name":"ContainerEntry"},"Protocols/ContainerEntry.html#/s:FP13SWCompression14ContainerEntry4dataFzT_V10Foundation4Data":{"name":"data()","abstract":"

    Undocumented

    ","parent_name":"ContainerEntry"},"Protocols/Container.html#/s:ZFP13SWCompression9Container4openFzT13containerDataV10Foundation4Data_GSaPS_14ContainerEntry__":{"name":"open(containerData:)","abstract":"

    Undocumented

    ","parent_name":"Container"},"Protocols/DecompressionAlgorithm.html#/s:ZFP13SWCompression22DecompressionAlgorithm10decompressFzT14compressedDataV10Foundation4Data_S2_":{"name":"decompress(compressedData:)","abstract":"

    Abstract decompress function.

    ","parent_name":"DecompressionAlgorithm"},"Protocols/Archive.html#/s:ZFP13SWCompression7Archive9unarchiveFzT11archiveDataV10Foundation4Data_S2_":{"name":"unarchive(archiveData:)","abstract":"

    Abstract unarchive function.

    ","parent_name":"Archive"},"Protocols/Archive.html":{"name":"Archive","abstract":"

    Abstract archive class which supports unarchiving.

    "},"Protocols/DecompressionAlgorithm.html":{"name":"DecompressionAlgorithm","abstract":"

    Abstract decompression algorithm class which supports decompression.

    "},"Protocols/Container.html":{"name":"Container","abstract":"

    Undocumented

    "},"Protocols/ContainerEntry.html":{"name":"ContainerEntry","abstract":"

    Undocumented

    "},"Enums/XZError.html#/s:FO13SWCompression7XZError10wrongMagicFMS0_S0_":{"name":"wrongMagic","abstract":"

    Either magic number in header or footer was not equal to predefined value.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError16wrongArchiveInfoFMS0_S0_":{"name":"wrongArchiveInfo","abstract":"

    One of special fields of archive had an incorrect value.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError18fieldReservedValueFMS0_S0_":{"name":"fieldReservedValue","abstract":"

    One of special fields of archive had a reserved value.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError12wrongInfoCRCFMS0_S0_":{"name":"wrongInfoCRC","abstract":"

    Checksum of one of special fields of archive was incorrect.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError13wrongFilterIDFMS0_S0_":{"name":"wrongFilterID","abstract":"

    ID of filter(s) used in archvie was unsupported.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError15checkTypeSHA256FMS0_S0_":{"name":"checkTypeSHA256","abstract":"

    Type of checksum of archive was SHA-256.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError13wrongDataSizeFMS0_S0_":{"name":"wrongDataSize","abstract":"

    Either size of decompressed data was not equal to specified one in block header or","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError10wrongCheckFMS0_FV10Foundation4DataS0_":{"name":"wrongCheck","abstract":"

    Computed checksum of uncompressed data didn’t match the value stored in the archive.","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError12wrongPaddingFMS0_S0_":{"name":"wrongPadding","abstract":"

    Unsupported padding of a structure in the archive.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError21multiByteIntegerErrorFMS0_S0_":{"name":"multiByteIntegerError","abstract":"

    Either null byte encountered or exceeded maximum amount bytes during reading multi byte number.

    ","parent_name":"XZError"},"Enums/TarError.html#/s:FO13SWCompression8TarError20tooSmallFileIsPassedFMS0_S0_":{"name":"tooSmallFileIsPassed","abstract":"

    Undocumented

    ","parent_name":"TarError"},"Enums/TarError.html#/s:FO13SWCompression8TarError16fieldIsNotNumberFMS0_S0_":{"name":"fieldIsNotNumber","abstract":"

    Undocumented

    ","parent_name":"TarError"},"Enums/TarError.html#/s:FO13SWCompression8TarError19wrongHeaderChecksumFMS0_S0_":{"name":"wrongHeaderChecksum","abstract":"

    Undocumented

    ","parent_name":"TarError"},"Enums/TarError.html#/s:FO13SWCompression8TarError17wrongUstarVersionFMS0_S0_":{"name":"wrongUstarVersion","abstract":"

    Undocumented

    ","parent_name":"TarError"},"Enums/TarError.html#/s:FO13SWCompression8TarError19wrongPaxHeaderEntryFMS0_S0_":{"name":"wrongPaxHeaderEntry","abstract":"

    Undocumented

    ","parent_name":"TarError"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error10wrongMagicFMS0_S0_":{"name":"wrongMagic","abstract":"

    Magic number was not 0x425a.

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error22wrongCompressionMethodFMS0_S0_":{"name":"wrongCompressionMethod","abstract":"

    Compression method was not type ‘h’ (not Huffman).

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error14wrongBlockSizeFMS0_S0_":{"name":"wrongBlockSize","abstract":"

    Unknown block size (not from ‘0’ to ‘9’).

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error14wrongBlockTypeFMS0_S0_":{"name":"wrongBlockType","abstract":"

    Unknown block type (was neither ‘pi’ nor ‘sqrt(pi)’).

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error15randomizedBlockFMS0_S0_":{"name":"randomizedBlock","abstract":"

    Block is randomized.

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error18wrongHuffmanGroupsFMS0_S0_":{"name":"wrongHuffmanGroups","abstract":"

    Wrong number of Huffman tables/groups (should be between 2 and 6).

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error13wrongSelectorFMS0_S0_":{"name":"wrongSelector","abstract":"

    Selector was greater than total number of Huffman tables/groups.

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error22wrongHuffmanLengthCodeFMS0_S0_":{"name":"wrongHuffmanLengthCode","abstract":"

    Wrong code of Huffman length (should be between 0 and 20).

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error14symbolNotFoundFMS0_S0_":{"name":"symbolNotFound","abstract":"

    Symbol was not found in Huffman tree.

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error8wrongCRCFMS0_FV10Foundation4DataS0_":{"name":"wrongCRC","abstract":"

    Computed CRC of uncompressed data didn’t match the value stored in the archive.","parent_name":"BZip2Error"},"Enums/DeflateError.html#/s:FO13SWCompression12DeflateError29wrongUncompressedBlockLengthsFMS0_S0_":{"name":"wrongUncompressedBlockLengths","abstract":"

    Uncompressed block’ length and nlength bytes were not compatible.

    ","parent_name":"DeflateError"},"Enums/DeflateError.html#/s:FO13SWCompression12DeflateError14wrongBlockTypeFMS0_S0_":{"name":"wrongBlockType","abstract":"

    Unknown block type (not from 0 to 2).

    ","parent_name":"DeflateError"},"Enums/DeflateError.html#/s:FO13SWCompression12DeflateError11wrongSymbolFMS0_S0_":{"name":"wrongSymbol","abstract":"

    Decoded symbol was found in Huffman tree but is unknown.

    ","parent_name":"DeflateError"},"Enums/DeflateError.html#/s:FO13SWCompression12DeflateError14symbolNotFoundFMS0_S0_":{"name":"symbolNotFound","abstract":"

    Symbol was not found in Huffman tree.

    ","parent_name":"DeflateError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError22wrongCompressionMethodFMS0_S0_":{"name":"wrongCompressionMethod","abstract":"

    Compression method was other than 8 which is the only supported one.

    ","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError20wrongCompressionInfoFMS0_S0_":{"name":"wrongCompressionInfo","abstract":"

    Compression info was greater than 7 which is uncompatible number 8 compression method.

    ","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError11wrongFcheckFMS0_S0_":{"name":"wrongFcheck","abstract":"

    First two bytes were inconsistent with each other.

    ","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError21wrongCompressionLevelFMS0_S0_":{"name":"wrongCompressionLevel","abstract":"

    Compression level was other than 0, 1, 2, 3.

    ","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError12wrongAdler32FMS0_FV10Foundation4DataS0_":{"name":"wrongAdler32","abstract":"

    Computed Adler-32 sum of uncompressed data didn’t match the value stored in the archive.","parent_name":"ZlibError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError15wrongPropertiesFMS0_S0_":{"name":"wrongProperties","abstract":"

    Properties byte was greater than 225.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError21rangeDecoderInitErrorFMS0_S0_":{"name":"rangeDecoderInitError","abstract":"

    Unable to initialize RanderDecorer.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError24exceededUncompressedSizeFMS0_S0_":{"name":"exceededUncompressedSize","abstract":"

    The number of uncompressed bytes hit limit in the middle of decoding.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError13windowIsEmptyFMS0_S0_":{"name":"windowIsEmpty","abstract":"

    Unable to perfrom repeat-distance decoding because there is nothing to repeat.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError23rangeDecoderFinishErrorFMS0_S0_":{"name":"rangeDecoderFinishError","abstract":"

    End of stream marker is reached, but range decoder is in incorrect state.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError16repeatWillExceedFMS0_S0_":{"name":"repeatWillExceed","abstract":"

    The number of bytes to repeat is greater than the amount bytes that is left to decode.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError17notEnoughToRepeatFMS0_S0_":{"name":"notEnoughToRepeat","abstract":"

    The amount of already decoded bytes is smaller than repeat length.

    ","parent_name":"LZMAError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError27notFoundCentralDirectoryEndFMS0_S0_":{"name":"notFoundCentralDirectoryEnd","abstract":"

    End of Central Directoty record was not found.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError14wrongSignatureFMS0_S0_":{"name":"wrongSignature","abstract":"

    Wrong signature of one of ZIP container’s structures.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError9wrongSizeFMS0_S0_":{"name":"wrongSize","abstract":"

    Wrong either compressed or uncompressed size of a ZIP container’s entry.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError12wrongVersionFMS0_S0_":{"name":"wrongVersion","abstract":"

    Wrong number of version needed to extract ZIP container.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError24multiVolumesNotSupportedFMS0_S0_":{"name":"multiVolumesNotSupported","abstract":"

    Archive either spanned or consists of several volumes. This feature is not supported.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError22encryptionNotSupportedFMS0_S0_":{"name":"encryptionNotSupported","abstract":"

    Entry or record is encrypted. This feature is not supported.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError20patchingNotSupportedFMS0_S0_":{"name":"patchingNotSupported","abstract":"

    Entry contains patched data. This feature is not supported.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError23compressionNotSupportedFMS0_S0_":{"name":"compressionNotSupported","abstract":"

    Wrong compression method of an entry.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError16wrongLocalHeaderFMS0_S0_":{"name":"wrongLocalHeader","abstract":"

    Wrong local header of an entry.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError10wrongCRC32FMS0_FV10Foundation4DataS0_":{"name":"wrongCRC32","abstract":"

    Computed CRC32 of entry’s data didn’t match the value stored in the container.","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError14wrongTextFieldFMS0_S0_":{"name":"wrongTextField","abstract":"

    Undocumented

    ","parent_name":"ZipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError10wrongMagicFMS0_S0_":{"name":"wrongMagic","abstract":"

    First two bytes of archive were not 31 and 139.

    ","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError22wrongCompressionMethodFMS0_S0_":{"name":"wrongCompressionMethod","abstract":"

    Compression method was other than 8 which is the only supported one.

    ","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError10wrongFlagsFMS0_S0_":{"name":"wrongFlags","abstract":"

    Reserved flags bits were not equal to 0.

    ","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError14wrongHeaderCRCFMS0_S0_":{"name":"wrongHeaderCRC","abstract":"

    Computed CRC of header didn’t match the value stored in the archive.

    ","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError8wrongCRCFMS0_FV10Foundation4DataS0_":{"name":"wrongCRC","abstract":"

    Computed CRC of uncompressed data didn’t match the value stored in the archive.","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError10wrongISizeFMS0_S0_":{"name":"wrongISize","abstract":"

    Computed isize didn’t match the value stored in the archive.

    ","parent_name":"GzipError"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error15wrongPropertiesFMS0_S0_":{"name":"wrongProperties","abstract":"

    Reserved bits of LZMA2 properties byte were not equal to zero.

    ","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error19wrongDictionarySizeFMS0_S0_":{"name":"wrongDictionarySize","abstract":"

    Dictionary size was too big.

    ","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error16wrongControlByteFMS0_S0_":{"name":"wrongControlByte","abstract":"

    Unknown conrol byte value of LZMA2 packet.

    ","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error10wrongResetFMS0_S0_":{"name":"wrongReset","abstract":"

    Unknown reset instruction encounetered in LZMA2 packet.

    ","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error10wrongSizesFMS0_S0_":{"name":"wrongSizes","abstract":"

    Either size of decompressed data was not equal to specified one in LZMA2 packet or","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html":{"name":"LZMA2Error","abstract":"

    Error happened during LZMA2 decompression."},"Enums/GzipError.html":{"name":"GzipError","abstract":"

    Error happened during unarchiving gzip archive."},"Enums/ZipError.html":{"name":"ZipError","abstract":"

    Error happened during processing ZIP archive (container)."},"Enums/LZMAError.html":{"name":"LZMAError","abstract":"

    Error happened during LZMA decompression."},"Enums/ZlibError.html":{"name":"ZlibError","abstract":"

    Error happened during unarchiving Zlib archive."},"Enums/DeflateError.html":{"name":"DeflateError","abstract":"

    Error happened during deflate decompression."},"Enums/BZip2Error.html":{"name":"BZip2Error","abstract":"

    Error happened during bzip2 decompression."},"Enums/TarError.html":{"name":"TarError","abstract":"

    Error happened during processing TAR archive (container)."},"Enums/XZError.html":{"name":"XZError","abstract":"

    Error happened during unarchiving XZ archive."},"Classes/XZArchive.html#/s:ZFC13SWCompression9XZArchive9unarchiveFzT11archiveDataV10Foundation4Data_S2_":{"name":"unarchive(archiveData:)","abstract":"

    Unarchives xz archive stored in archiveData.

    ","parent_name":"XZArchive"},"Classes/TarContainer.html#/s:ZFC13SWCompression12TarContainer4openFzT13containerDataV10Foundation4Data_GSaPS_14ContainerEntry__":{"name":"open(containerData:)","abstract":"

    Undocumented

    ","parent_name":"TarContainer"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType6normalFMS1_S1_":{"name":"normal","abstract":"

    Undocumented

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType8hardLinkFMS1_S1_":{"name":"hardLink","abstract":"

    Undocumented

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType12symbolicLinkFMS1_S1_":{"name":"symbolicLink","abstract":"

    Undocumented

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType16characterSpecialFMS1_S1_":{"name":"characterSpecial","abstract":"

    Undocumented

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType12blockSpecialFMS1_S1_":{"name":"blockSpecial","abstract":"

    Undocumented

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType9directoryFMS1_S1_":{"name":"directory","abstract":"

    Undocumented

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType4fifoFMS1_S1_":{"name":"fifo","abstract":"

    Undocumented

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType10contiguousFMS1_S1_":{"name":"contiguous","abstract":"

    Undocumented

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType20globalExtendedHeaderFMS1_S1_":{"name":"globalExtendedHeader","abstract":"

    Undocumented

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType19localExtendedHeaderFMS1_S1_":{"name":"localExtendedHeader","abstract":"

    Undocumented

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType23vendorUnknownOrReservedFMS1_S1_":{"name":"vendorUnknownOrReserved","abstract":"

    Undocumented

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html":{"name":"EntryType","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry4nameSS":{"name":"name","abstract":"

    Name of the file or directory.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry11isDirectorySb":{"name":"isDirectory","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry4modeGSqSi_":{"name":"mode","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry7ownerIDGSqSi_":{"name":"ownerID","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry7groupIDGSqSi_":{"name":"groupID","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry4sizeSi":{"name":"size","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry16modificationTimeV10Foundation4Date":{"name":"modificationTime","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry4typeOS0_9EntryType":{"name":"type","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry13ownerUserNameGSqSS_":{"name":"ownerUserName","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry14ownerGroupNameGSqSS_":{"name":"ownerGroupName","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry10accessTimeGSqV10Foundation4Date_":{"name":"accessTime","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry7charsetGSqSS_":{"name":"charset","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry7commentGSqSS_":{"name":"comment","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry8linkPathGSqSS_":{"name":"linkPath","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry28unknownExtendedHeaderEntriesGVs10DictionarySSSS_":{"name":"unknownExtendedHeaderEntries","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:FC13SWCompression8TarEntry4dataFT_V10Foundation4Data":{"name":"data()","abstract":"

    Returns data associated with this entry.

    ","parent_name":"TarEntry"},"Classes/BZip2.html#/s:ZFC13SWCompression5BZip210decompressFzT14compressedDataV10Foundation4Data_S2_":{"name":"decompress(compressedData:)","abstract":"

    Decompresses compressedData with BZip2 algortihm.

    ","parent_name":"BZip2"},"Classes/Deflate.html#/s:ZFC13SWCompression7Deflate10decompressFzT14compressedDataV10Foundation4Data_S2_":{"name":"decompress(compressedData:)","abstract":"

    Decompresses compressedData with DEFLATE algortihm.

    ","parent_name":"Deflate"},"Classes/Deflate.html#/s:ZFC13SWCompression7Deflate8compressFzT4dataV10Foundation4Data_S2_":{"name":"compress(data:)","abstract":"

    Compresses data with DEFLATE algortihm.

    ","parent_name":"Deflate"},"Classes/ZlibArchive.html#/s:ZFC13SWCompression11ZlibArchive9unarchiveFzT11archiveDataV10Foundation4Data_S2_":{"name":"unarchive(archiveData:)","abstract":"

    Unarchives Zlib archive stored in archiveData.

    ","parent_name":"ZlibArchive"},"Classes/ZlibArchive.html#/s:ZFC13SWCompression11ZlibArchive7archiveFzT4dataV10Foundation4Data_S2_":{"name":"archive(data:)","abstract":"

    Archives data into Zlib archive. Data will be also compressed with DEFLTATE algorithm.","parent_name":"ZlibArchive"},"Classes/LZMA.html#/s:ZFC13SWCompression4LZMA10decompressFzT14compressedDataV10Foundation4Data_S2_":{"name":"decompress(compressedData:)","abstract":"

    Decompresses compressedData with LZMA algortihm.

    ","parent_name":"LZMA"},"Classes/ZipContainer.html#/s:ZFC13SWCompression12ZipContainer4openFzT13containerDataV10Foundation4Data_GSaPS_14ContainerEntry__":{"name":"open(containerData:)","abstract":"

    Processes ZIP archive (container) and returns an array of ContainerEntries (which are actually ZipEntries).","parent_name":"ZipContainer"},"Classes/ZipEntry.html#/s:vC13SWCompression8ZipEntry4nameSS":{"name":"name","abstract":"

    Name of the file or directory.

    ","parent_name":"ZipEntry"},"Classes/ZipEntry.html#/s:vC13SWCompression8ZipEntry7commentGSqSS_":{"name":"comment","abstract":"

    Comment associated with the entry.

    ","parent_name":"ZipEntry"},"Classes/ZipEntry.html#/s:vC13SWCompression8ZipEntry10attributesVs6UInt32":{"name":"attributes","abstract":"

    File or directory attributes related to the file system of archive’s creator.

    ","parent_name":"ZipEntry"},"Classes/ZipEntry.html#/s:vC13SWCompression8ZipEntry4sizeSi":{"name":"size","abstract":"

    Undocumented

    ","parent_name":"ZipEntry"},"Classes/ZipEntry.html#/s:vC13SWCompression8ZipEntry11isDirectorySb":{"name":"isDirectory","abstract":"

    True, if an entry is likely to be a directory.","parent_name":"ZipEntry"},"Classes/ZipEntry.html#/s:FC13SWCompression8ZipEntry4dataFzT_V10Foundation4Data":{"name":"data()","abstract":"

    Returns data associated with this entry.

    ","parent_name":"ZipEntry"},"Classes/GzipArchive.html#/s:ZFC13SWCompression11GzipArchive9unarchiveFzT11archiveDataV10Foundation4Data_S2_":{"name":"unarchive(archiveData:)","abstract":"

    Unarchives gzip archive stored in archiveData.

    ","parent_name":"GzipArchive"},"Classes/GzipArchive.html#/s:ZFC13SWCompression11GzipArchive7archiveFzT4dataV10Foundation4Data_S2_":{"name":"archive(data:)","abstract":"

    Archives data into GZip archive. Data will be also compressed with DEFLTATE algorithm.","parent_name":"GzipArchive"},"Classes/LZMA2.html#/s:ZFC13SWCompression5LZMA210decompressFzT14compressedDataV10Foundation4Data_S2_":{"name":"decompress(compressedData:)","abstract":"

    Decompresses compressedData with LZMA2 algortihm. LZMA2 is a modification of LZMA.

    ","parent_name":"LZMA2"},"Classes/LZMA2.html":{"name":"LZMA2","abstract":"

    Provides function to decompress data, which were compressed with LZMA2

    "},"Classes/GzipArchive.html":{"name":"GzipArchive","abstract":"

    Provides unarchive function for GZip archives.

    "},"Classes/ZipEntry.html":{"name":"ZipEntry","abstract":"

    Represents either a file or directory entry inside ZIP archive.

    "},"Classes/ZipContainer.html":{"name":"ZipContainer","abstract":"

    Provides function which opens ZIP archives (containers).

    "},"Classes/LZMA.html":{"name":"LZMA","abstract":"

    Provides function to decompress data, which were compressed with LZMA

    "},"Classes/ZlibArchive.html":{"name":"ZlibArchive","abstract":"

    Provides unarchive function for Zlib archives.

    "},"Classes/Deflate.html":{"name":"Deflate","abstract":"

    Provides function to decompress data, which were compressed with DEFLATE.

    "},"Classes/BZip2.html":{"name":"BZip2","abstract":"

    Provides function to decompress data, which were compressed using BZip2.

    "},"Classes/TarEntry.html":{"name":"TarEntry","abstract":"

    Represents either a file or directory entry inside TAR archive.

    "},"Classes/TarContainer.html":{"name":"TarContainer","abstract":"

    Provides function which opens TAR archives (containers).

    "},"Classes/XZArchive.html":{"name":"XZArchive","abstract":"

    Provides unarchive function for XZ archives.

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Enums.html":{"name":"Enums","abstract":"

    The following enums are available globally.

    "},"Protocols.html":{"name":"Protocols","abstract":"

    The following protocols are available globally.

    "},"Structs.html":{"name":"Structs","abstract":"

    The following structs are available globally.

    "}} \ No newline at end of file +{"Structs/ZlibHeader/CompressionLevel.html#/s:FOV13SWCompression10ZlibHeader16CompressionLevel16fastestAlgorithmFMS1_S1_":{"name":"fastestAlgorithm","abstract":"

    Fastest algorithm.

    ","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html#/s:FOV13SWCompression10ZlibHeader16CompressionLevel13fastAlgorithmFMS1_S1_":{"name":"fastAlgorithm","abstract":"

    Fast algorithm.

    ","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html#/s:FOV13SWCompression10ZlibHeader16CompressionLevel16defaultAlgorithmFMS1_S1_":{"name":"defaultAlgorithm","abstract":"

    Default algorithm.

    ","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html#/s:FOV13SWCompression10ZlibHeader16CompressionLevel13slowAlgorithmFMS1_S1_":{"name":"slowAlgorithm","abstract":"

    Slowest algorithm but with maximum compression.

    ","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionMethod.html#/s:FOV13SWCompression10ZlibHeader17CompressionMethod7deflateFMS1_S1_":{"name":"deflate","abstract":"

    The only one supported compression method (Deflate).

    ","parent_name":"CompressionMethod"},"Structs/ZlibHeader/CompressionMethod.html":{"name":"CompressionMethod","abstract":"

    Supported compression methods in zlib archive.

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader/CompressionLevel.html":{"name":"CompressionLevel","abstract":"

    Levels of compression which can be used to create Zlib archive.

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:vV13SWCompression10ZlibHeader17compressionMethodOS0_17CompressionMethod":{"name":"compressionMethod","abstract":"

    Compression method of archive. Currently, always equals to .deflate.

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:vV13SWCompression10ZlibHeader16compressionLevelOS0_16CompressionLevel":{"name":"compressionLevel","abstract":"

    Level of compression used in archive.

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:vV13SWCompression10ZlibHeader10windowSizeSi":{"name":"windowSize","abstract":"

    Size of ‘window’: moving interval of data which was used to make archive.

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:FV13SWCompression10ZlibHeadercFzT7archiveV10Foundation4Data_S0_":{"name":"init(archive:)","abstract":"

    Initializes the structure with the values from Zlib archive.

    ","parent_name":"ZlibHeader"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType4unixFMS1_S1_":{"name":"unix","abstract":"

    One of many UNIX-like systems.

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType9macintoshFMS1_S1_":{"name":"macintosh","abstract":"

    Older Macintosh systems.

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType4ntfsFMS1_S1_":{"name":"ntfs","abstract":"

    File system used in Microsoft™®© Windows™®©.

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType7unknownFMS1_S1_":{"name":"unknown","abstract":"

    File system was unknown to the archiver.

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType5otherFMS1_S1_":{"name":"other","abstract":"

    File system is one of the rare systems.

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/CompressionMethod.html#/s:FOV13SWCompression10GzipHeader17CompressionMethod7deflateFMS1_S1_":{"name":"deflate","abstract":"

    The only one supported compression method (Deflate).

    ","parent_name":"CompressionMethod"},"Structs/GzipHeader/CompressionMethod.html":{"name":"CompressionMethod","abstract":"

    Supported compression methods in GZip archive.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader/FileSystemType.html":{"name":"FileSystemType","abstract":"

    Type of file system on which GZip archive was created.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader17compressionMethodOS0_17CompressionMethod":{"name":"compressionMethod","abstract":"

    Compression method of archive. Currently, always equals to .deflate.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader16modificationTimeGSqV10Foundation4Date_":{"name":"modificationTime","abstract":"

    The most recent modification time of the original file.","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader6osTypeOS0_14FileSystemType":{"name":"osType","abstract":"

    Type of file system on which archivation took place.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader8fileNameGSqSS_":{"name":"fileName","abstract":"

    Name of the original file. If archive doesn’t contain file’s name, then nil.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader7commentGSqSS_":{"name":"comment","abstract":"

    Comment stored in archive. If archive doesn’t contain any comment, then nil.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader10isTextFileSb":{"name":"isTextFile","abstract":"

    Check if file is likely to be text file or ASCII-file.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:FV13SWCompression10GzipHeadercFzT7archiveV10Foundation4Data_S0_":{"name":"init(archive:)","abstract":"

    Initializes the structure with the values from the first ‘member’ of GZip archive.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html":{"name":"GzipHeader","abstract":"

    Represents a GZip archive’s header.

    "},"Structs/ZlibHeader.html":{"name":"ZlibHeader","abstract":"

    Represents a Zlib archive’s header.

    "},"Protocols/ContainerEntry.html#/s:vP13SWCompression14ContainerEntry4nameSS":{"name":"name","abstract":"

    Retrieve name of the entry from the container.

    ","parent_name":"ContainerEntry"},"Protocols/ContainerEntry.html#/s:vP13SWCompression14ContainerEntry4sizeSi":{"name":"size","abstract":"

    Retrieve size of the entry’s data from the container.

    ","parent_name":"ContainerEntry"},"Protocols/ContainerEntry.html#/s:vP13SWCompression14ContainerEntry11isDirectorySb":{"name":"isDirectory","abstract":"

    Check if entry is a directory.

    ","parent_name":"ContainerEntry"},"Protocols/ContainerEntry.html#/s:FP13SWCompression14ContainerEntry4dataFzT_V10Foundation4Data":{"name":"data()","abstract":"

    Retrieve entry’s data from the container.

    ","parent_name":"ContainerEntry"},"Protocols/Container.html#/s:ZFP13SWCompression9Container4openFzT9containerV10Foundation4Data_GSaPS_14ContainerEntry__":{"name":"open(container:)","abstract":"

    Retrieve all the entries from the container.

    ","parent_name":"Container"},"Protocols/DecompressionAlgorithm.html#/s:ZFP13SWCompression22DecompressionAlgorithm10decompressFzT4dataV10Foundation4Data_S2_":{"name":"decompress(data:)","abstract":"

    Decompress data compressed with particular algorithm.

    ","parent_name":"DecompressionAlgorithm"},"Protocols/Archive.html#/s:ZFP13SWCompression7Archive9unarchiveFzT7archiveV10Foundation4Data_S2_":{"name":"unarchive(archive:)","abstract":"

    Unarchive data from the archive.

    ","parent_name":"Archive"},"Protocols/Archive.html":{"name":"Archive","abstract":"

    A type that represents an archive.

    "},"Protocols/DecompressionAlgorithm.html":{"name":"DecompressionAlgorithm","abstract":"

    A type that provides an implementation of a particular decompression algorithm.

    "},"Protocols/Container.html":{"name":"Container","abstract":"

    A type that represents a container of files, directories and/or other data.

    "},"Protocols/ContainerEntry.html":{"name":"ContainerEntry","abstract":"

    A type that represents an entry from a container (file or directory) with attributes.

    "},"Enums/XZError.html#/s:FO13SWCompression7XZError10wrongMagicFMS0_S0_":{"name":"wrongMagic","abstract":"

    Either ‘magic’ number in header or footer isn’t equal to a predefined value.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError15wrongFieldValueFMS0_S0_":{"name":"wrongFieldValue","abstract":"

    One of the fields in archive has an incorrect value.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError18fieldReservedValueFMS0_S0_":{"name":"fieldReservedValue","abstract":"

    One of the reserved fields in archive has an unexpected value, which can also mean (apart from damaged archive),","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError12wrongInfoCRCFMS0_S0_":{"name":"wrongInfoCRC","abstract":"

    Checksum of one of the fields of archive doesn’t match the value stored in archive.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError13wrongFilterIDFMS0_S0_":{"name":"wrongFilterID","abstract":"

    Filter used in archvie is unsupported.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError15checkTypeSHA256FMS0_S0_":{"name":"checkTypeSHA256","abstract":"

    Archive uses SHA-256 checksum which is unsupported.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError13wrongDataSizeFMS0_S0_":{"name":"wrongDataSize","abstract":"

    Either size of decompressed data isn’t equal to the one specified in archive or","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError10wrongCheckFMS0_FV10Foundation4DataS0_":{"name":"wrongCheck","abstract":"

    Computed checksum of uncompressed data doesn’t match the value stored in the archive.","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError12wrongPaddingFMS0_S0_":{"name":"wrongPadding","abstract":"

    Padding (null-bytes appended to an archive’s structure) is incorrect.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError21multiByteIntegerErrorFMS0_S0_":{"name":"multiByteIntegerError","abstract":"

    Either null byte encountered or exceeded maximum amount bytes during reading multi byte number.

    ","parent_name":"XZError"},"Enums/TarError.html#/s:FO13SWCompression8TarError20tooSmallFileIsPassedFMS0_S0_":{"name":"tooSmallFileIsPassed","abstract":"

    Size of data is too small, even to contain only one header.

    ","parent_name":"TarError"},"Enums/TarError.html#/s:FO13SWCompression8TarError16fieldIsNotNumberFMS0_S0_":{"name":"fieldIsNotNumber","abstract":"

    Failed to process a field as a number.

    ","parent_name":"TarError"},"Enums/TarError.html#/s:FO13SWCompression8TarError19wrongHeaderChecksumFMS0_S0_":{"name":"wrongHeaderChecksum","abstract":"

    Computed checksum of a header doesn’t match the value stored in container.

    ","parent_name":"TarError"},"Enums/TarError.html#/s:FO13SWCompression8TarError17wrongUstarVersionFMS0_S0_":{"name":"wrongUstarVersion","abstract":"

    Unsupported version of USTAR format.

    ","parent_name":"TarError"},"Enums/TarError.html#/s:FO13SWCompression8TarError19wrongPaxHeaderEntryFMS0_S0_":{"name":"wrongPaxHeaderEntry","abstract":"

    Entry from PAX extended header is in incorrect format.

    ","parent_name":"TarError"},"Enums/TarError.html#/s:FO13SWCompression8TarError14notAsciiStringFMS0_S0_":{"name":"notAsciiString","abstract":"

    Failed to process a field as an ASCII string.

    ","parent_name":"TarError"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error10wrongMagicFMS0_S0_":{"name":"wrongMagic","abstract":"

    ‘Magic’ number is not 0x425a.

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error22wrongCompressionMethodFMS0_S0_":{"name":"wrongCompressionMethod","abstract":"

    Compression method is not type ‘h’ (not Huffman).

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error14wrongBlockSizeFMS0_S0_":{"name":"wrongBlockSize","abstract":"

    Unsupported block size (not from ‘0’ to ‘9’).

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error14wrongBlockTypeFMS0_S0_":{"name":"wrongBlockType","abstract":"

    Unsupported block type (is neither ‘pi’ nor ‘sqrt(pi)’).

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error15randomizedBlockFMS0_S0_":{"name":"randomizedBlock","abstract":"

    Block is randomized.

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error18wrongHuffmanGroupsFMS0_S0_":{"name":"wrongHuffmanGroups","abstract":"

    Wrong number of Huffman tables/groups (should be between 2 and 6).

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error13wrongSelectorFMS0_S0_":{"name":"wrongSelector","abstract":"

    Selector is greater than the total number of Huffman tables/groups.

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error22wrongHuffmanLengthCodeFMS0_S0_":{"name":"wrongHuffmanLengthCode","abstract":"

    Wrong code of Huffman length (should be between 0 and 20).

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error14symbolNotFoundFMS0_S0_":{"name":"symbolNotFound","abstract":"

    Symbol wasn’t found in Huffman tree.

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error8wrongCRCFMS0_FV10Foundation4DataS0_":{"name":"wrongCRC","abstract":"

    Computed checksum of uncompressed data doesn’t match the value stored in archive.","parent_name":"BZip2Error"},"Enums/DeflateError.html#/s:FO13SWCompression12DeflateError29wrongUncompressedBlockLengthsFMS0_S0_":{"name":"wrongUncompressedBlockLengths","abstract":"

    Uncompressed block’s length and nlength bytes isn’t consistent with each other.

    ","parent_name":"DeflateError"},"Enums/DeflateError.html#/s:FO13SWCompression12DeflateError14wrongBlockTypeFMS0_S0_":{"name":"wrongBlockType","abstract":"

    Unknown block type (not 0, 1 or 2).

    ","parent_name":"DeflateError"},"Enums/DeflateError.html#/s:FO13SWCompression12DeflateError11wrongSymbolFMS0_S0_":{"name":"wrongSymbol","abstract":"

    Decoded symbol was found in Huffman tree but is unknown.

    ","parent_name":"DeflateError"},"Enums/DeflateError.html#/s:FO13SWCompression12DeflateError14symbolNotFoundFMS0_S0_":{"name":"symbolNotFound","abstract":"

    Symbol wasn’t found in Huffman tree.

    ","parent_name":"DeflateError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError22wrongCompressionMethodFMS0_S0_":{"name":"wrongCompressionMethod","abstract":"

    Compression method used in archive is different from Deflate, which is the only supported one.

    ","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError20wrongCompressionInfoFMS0_S0_":{"name":"wrongCompressionInfo","abstract":"

    Compression info has value incompatible with Deflate compression method.

    ","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError11wrongFcheckFMS0_S0_":{"name":"wrongFcheck","abstract":"

    First two bytes of archive’s flags are inconsistent with each other.

    ","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError21wrongCompressionLevelFMS0_S0_":{"name":"wrongCompressionLevel","abstract":"

    Compression level has value, which is different from the supported ones.

    ","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError12wrongAdler32FMS0_FV10Foundation4DataS0_":{"name":"wrongAdler32","abstract":"

    Computed checksum of uncompressed data doesn’t match the value stored in archive.","parent_name":"ZlibError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError15wrongPropertiesFMS0_S0_":{"name":"wrongProperties","abstract":"

    Properties’ byte is greater than 225.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError21rangeDecoderInitErrorFMS0_S0_":{"name":"rangeDecoderInitError","abstract":"

    Unable to initialize RanderDecorer.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError24exceededUncompressedSizeFMS0_S0_":{"name":"exceededUncompressedSize","abstract":"

    Size of uncompressed data hit specified limit in the middle of decoding.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError13windowIsEmptyFMS0_S0_":{"name":"windowIsEmpty","abstract":"

    Unable to perfrom repeat-distance decoding because there is nothing to repeat.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError23rangeDecoderFinishErrorFMS0_S0_":{"name":"rangeDecoderFinishError","abstract":"

    End of stream marker is reached, but range decoder is in incorrect state.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError16repeatWillExceedFMS0_S0_":{"name":"repeatWillExceed","abstract":"

    The number of bytes to repeat is greater than the amount bytes that is left to decode.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError17notEnoughToRepeatFMS0_S0_":{"name":"notEnoughToRepeat","abstract":"

    The amount of already decoded bytes is smaller than repeat length.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError23decoderIsNotInitialisedFMS0_S0_":{"name":"decoderIsNotInitialised","abstract":"

    LZMADecoder wasn’t properly initialized before decoding data.

    ","parent_name":"LZMAError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError27notFoundCentralDirectoryEndFMS0_S0_":{"name":"notFoundCentralDirectoryEnd","abstract":"

    End of Central Directoty record wasn’t found.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError14wrongSignatureFMS0_S0_":{"name":"wrongSignature","abstract":"

    Wrong signature of one of container’s structures.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError9wrongSizeFMS0_S0_":{"name":"wrongSize","abstract":"

    Wrong either compressed or uncompressed size of a container’s entry.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError12wrongVersionFMS0_S0_":{"name":"wrongVersion","abstract":"

    Version needed to process container is unsupported.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError24multiVolumesNotSupportedFMS0_S0_":{"name":"multiVolumesNotSupported","abstract":"

    Container is either spanned or consists of several volumes. These features aren’t supported.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError22encryptionNotSupportedFMS0_S0_":{"name":"encryptionNotSupported","abstract":"

    Entry or record is encrypted. This feature isn’t supported.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError20patchingNotSupportedFMS0_S0_":{"name":"patchingNotSupported","abstract":"

    Entry contains patched data. This feature isn’t supported.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError23compressionNotSupportedFMS0_S0_":{"name":"compressionNotSupported","abstract":"

    Entry is compressed using unsupported compression method.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError16wrongLocalHeaderFMS0_S0_":{"name":"wrongLocalHeader","abstract":"

    Local header of an entry is inconsistent with Central Directory.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError10wrongCRC32FMS0_FV10Foundation4DataS0_":{"name":"wrongCRC32","abstract":"

    Computed checksum of entry’s data doesn’t match the value stored in container.","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError14wrongTextFieldFMS0_S0_":{"name":"wrongTextField","abstract":"

    Either entry’s comment or file name cannot be processed using UTF-8 encoding.

    ","parent_name":"ZipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError10wrongMagicFMS0_S0_":{"name":"wrongMagic","abstract":"

    First two bytes (‘magic’ number) of archive isn’t 31 and 139.

    ","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError22wrongCompressionMethodFMS0_S0_":{"name":"wrongCompressionMethod","abstract":"

    Compression method used in archive is different from Deflate, which is the only supported one.

    ","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError10wrongFlagsFMS0_S0_":{"name":"wrongFlags","abstract":"

    One of the reserved fields in archive has an unexpected value, which can also mean (apart from damaged archive),","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError14wrongHeaderCRCFMS0_S0_":{"name":"wrongHeaderCRC","abstract":"

    Computed CRC of archive’s header doesn’t match the value stored in archive.

    ","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError8wrongCRCFMS0_FV10Foundation4DataS0_":{"name":"wrongCRC","abstract":"

    Computed checksum of uncompressed data doesn’t match the value stored in archive.","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError10wrongISizeFMS0_S0_":{"name":"wrongISize","abstract":"

    Computed ‘isize’ didn’t match the value stored in the archive.

    ","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError21cannotEncodeISOLatin1FMS0_S0_":{"name":"cannotEncodeISOLatin1","abstract":"

    Either specified file name or comment cannot be encoded using ISO Latin-1 encoding.

    ","parent_name":"GzipError"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error15wrongPropertiesFMS0_S0_":{"name":"wrongProperties","abstract":"

    Reserved bits of LZMA2 properties’ byte aren’t equal to zero.

    ","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error19wrongDictionarySizeFMS0_S0_":{"name":"wrongDictionarySize","abstract":"

    Dictionary size is too big.

    ","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error16wrongControlByteFMS0_S0_":{"name":"wrongControlByte","abstract":"

    Unknown conrol byte value of LZMA2 packet.

    ","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error10wrongResetFMS0_S0_":{"name":"wrongReset","abstract":"

    Unknown reset instruction encountered in LZMA2 packet.

    ","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error10wrongSizesFMS0_S0_":{"name":"wrongSizes","abstract":"

    Either size of decompressed data isn’t equal to the one specified in LZMA2 packet or","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html":{"name":"LZMA2Error","abstract":"

    Represents an error, which happened during LZMA2 decompression."},"Enums/GzipError.html":{"name":"GzipError","abstract":"

    Represents an error, which happened during processing GZip archive."},"Enums/ZipError.html":{"name":"ZipError","abstract":"

    Represents an error, which happened during processing ZIP container."},"Enums/LZMAError.html":{"name":"LZMAError","abstract":"

    Represents an error, which happened during LZMA decompression."},"Enums/ZlibError.html":{"name":"ZlibError","abstract":"

    Represents an error, which happened during processing Zlib archive."},"Enums/DeflateError.html":{"name":"DeflateError","abstract":"

    Represents an error, which happened during Deflate compression or decompression."},"Enums/BZip2Error.html":{"name":"BZip2Error","abstract":"

    Represents an error, which happened during BZip2 decompression."},"Enums/TarError.html":{"name":"TarError","abstract":"

    Represents an error, which happened during processing TAR container."},"Enums/XZError.html":{"name":"XZError","abstract":"

    Represents an error, which happened during unarchiving XZ archive."},"Classes/XZArchive.html#/s:ZFC13SWCompression9XZArchive9unarchiveFzT7archiveV10Foundation4Data_S2_":{"name":"unarchive(archive:)","abstract":"

    Unarchives XZ archive.

    ","parent_name":"XZArchive"},"Classes/TarContainer.html#/s:ZFC13SWCompression12TarContainer4openFzT9containerV10Foundation4Data_GSaPS_14ContainerEntry__":{"name":"open(container:)","abstract":"

    Processes TAR container and returns an array of ContainerEntries (which are actually TarEntries).

    ","parent_name":"TarContainer"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType6normalFMS1_S1_":{"name":"normal","abstract":"

    Normal file.

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType8hardLinkFMS1_S1_":{"name":"hardLink","abstract":"

    Hard linked entry.

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType12symbolicLinkFMS1_S1_":{"name":"symbolicLink","abstract":"

    Symbolically linked entry.

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType16characterSpecialFMS1_S1_":{"name":"characterSpecial","abstract":"

    Character special file.

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType12blockSpecialFMS1_S1_":{"name":"blockSpecial","abstract":"

    Block special file.

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType9directoryFMS1_S1_":{"name":"directory","abstract":"

    Directory.

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType4fifoFMS1_S1_":{"name":"fifo","abstract":"

    FIFO special file.

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType10contiguousFMS1_S1_":{"name":"contiguous","abstract":"

    Contiguous file.

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType20globalExtendedHeaderFMS1_S1_":{"name":"globalExtendedHeader","abstract":"

    PAX global extended header. (Should not be encountered separately).

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType19localExtendedHeaderFMS1_S1_":{"name":"localExtendedHeader","abstract":"

    PAX local extended header. (Should not be encountered separately).

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType23vendorUnknownOrReservedFMS1_S1_":{"name":"vendorUnknownOrReserved","abstract":"

    Either unknown type, vendor specific or reserved value.

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html":{"name":"EntryType","abstract":"

    Represents a type of an entry.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry4nameSS":{"name":"name","abstract":"

    Name of the file or directory.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry11isDirectorySb":{"name":"isDirectory","abstract":"

    True, if an entry is a directory.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry4sizeSi":{"name":"size","abstract":"

    Size of the data associated with the entry.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry4modeGSqSi_":{"name":"mode","abstract":"

    File mode.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry7ownerIDGSqSi_":{"name":"ownerID","abstract":"

    Owner’s ID.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry7groupIDGSqSi_":{"name":"groupID","abstract":"

    Owner’s group ID.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry16modificationTimeV10Foundation4Date":{"name":"modificationTime","abstract":"

    The most recent modification time of the original file or directory.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry4typeOS0_9EntryType":{"name":"type","abstract":"

    Type of entry.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry13ownerUserNameGSqSS_":{"name":"ownerUserName","abstract":"

    Owner’s user name.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry14ownerGroupNameGSqSS_":{"name":"ownerGroupName","abstract":"

    Owner’s group name.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry10accessTimeGSqV10Foundation4Date_":{"name":"accessTime","abstract":"

    The most recent access time of the original file or directory (PAX only).

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry7charsetGSqSS_":{"name":"charset","abstract":"

    Name of the character set used to encode entry’s data (PAX only).

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry7commentGSqSS_":{"name":"comment","abstract":"

    Comment associated with the entry (PAX only).

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry8linkPathGSqSS_":{"name":"linkPath","abstract":"

    Path to linked entry (PAX only).

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry28unknownExtendedHeaderEntriesGVs10DictionarySSSS_":{"name":"unknownExtendedHeaderEntries","abstract":"

    Other entries from PAX extended headers.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:FC13SWCompression8TarEntry4dataFT_V10Foundation4Data":{"name":"data()","abstract":"

    Returns data associated with this entry.

    ","parent_name":"TarEntry"},"Classes/BZip2.html#/s:ZFC13SWCompression5BZip210decompressFzT4dataV10Foundation4Data_S2_":{"name":"decompress(data:)","abstract":"

    Decompresses data using BZip2 algortihm.

    ","parent_name":"BZip2"},"Classes/Deflate.html#/s:ZFC13SWCompression7Deflate10decompressFzT4dataV10Foundation4Data_S2_":{"name":"decompress(data:)","abstract":"

    Decompresses data using Deflate algortihm.

    ","parent_name":"Deflate"},"Classes/Deflate.html#/s:ZFC13SWCompression7Deflate8compressFzT4dataV10Foundation4Data_S2_":{"name":"compress(data:)","abstract":"

    Compresses data with Deflate algortihm.

    ","parent_name":"Deflate"},"Classes/ZlibArchive.html#/s:ZFC13SWCompression11ZlibArchive9unarchiveFzT7archiveV10Foundation4Data_S2_":{"name":"unarchive(archive:)","abstract":"

    Unarchives Zlib archive.

    ","parent_name":"ZlibArchive"},"Classes/ZlibArchive.html#/s:ZFC13SWCompression11ZlibArchive7archiveFzT4dataV10Foundation4Data_S2_":{"name":"archive(data:)","abstract":"

    Archives data into Zlib archive.","parent_name":"ZlibArchive"},"Classes/LZMA.html#/s:ZFC13SWCompression4LZMA10decompressFzT4dataV10Foundation4Data_S2_":{"name":"decompress(data:)","abstract":"

    Decompresses data using LZMA algortihm.

    ","parent_name":"LZMA"},"Classes/ZipContainer.html#/s:ZFC13SWCompression12ZipContainer4openFzT9containerV10Foundation4Data_GSaPS_14ContainerEntry__":{"name":"open(container:)","abstract":"

    Processes ZIP container and returns an array of ContainerEntries (which are actually ZipEntries).

    ","parent_name":"ZipContainer"},"Classes/ZipEntry.html#/s:vC13SWCompression8ZipEntry4nameSS":{"name":"name","abstract":"

    Name of the file or directory.

    ","parent_name":"ZipEntry"},"Classes/ZipEntry.html#/s:vC13SWCompression8ZipEntry7commentGSqSS_":{"name":"comment","abstract":"

    Comment associated with the entry.

    ","parent_name":"ZipEntry"},"Classes/ZipEntry.html#/s:vC13SWCompression8ZipEntry10attributesVs6UInt32":{"name":"attributes","abstract":"

    File or directory attributes related to the file system of the container’s creator.

    ","parent_name":"ZipEntry"},"Classes/ZipEntry.html#/s:vC13SWCompression8ZipEntry4sizeSi":{"name":"size","abstract":"

    Size of the data associated with the entry.

    ","parent_name":"ZipEntry"},"Classes/ZipEntry.html#/s:vC13SWCompression8ZipEntry11isDirectorySb":{"name":"isDirectory","abstract":"

    True, if an entry is a directory.","parent_name":"ZipEntry"},"Classes/ZipEntry.html#/s:FC13SWCompression8ZipEntry4dataFzT_V10Foundation4Data":{"name":"data()","abstract":"

    Returns data associated with this entry.

    ","parent_name":"ZipEntry"},"Classes/GzipArchive.html#/s:ZFC13SWCompression11GzipArchive9unarchiveFzT7archiveV10Foundation4Data_S2_":{"name":"unarchive(archive:)","abstract":"

    Unarchives GZip archive.

    ","parent_name":"GzipArchive"},"Classes/GzipArchive.html#/s:ZFC13SWCompression11GzipArchive7archiveFzT4dataV10Foundation4Data7commentGSqSS_8fileNameGSqSS_14writeHeaderCRCSb10isTextFileSb6osTypeGSqOVS_10GzipHeader14FileSystemType_16modificationTimeGSqVS1_4Date__S2_":{"name":"archive(data:comment:fileName:writeHeaderCRC:isTextFile:osType:modificationTime:)","abstract":"

    Archives data into GZip archive, using various specified options.","parent_name":"GzipArchive"},"Classes/LZMA2.html#/s:ZFC13SWCompression5LZMA210decompressFzT4dataV10Foundation4Data_S2_":{"name":"decompress(data:)","abstract":"

    Decompresses data using LZMA2 algortihm.

    ","parent_name":"LZMA2"},"Classes/LZMA2.html":{"name":"LZMA2","abstract":"

    Provides decompression function for LZMA2 algorithm.

    "},"Classes/GzipArchive.html":{"name":"GzipArchive","abstract":"

    Provides unarchive and archive functions for GZip archives.

    "},"Classes/ZipEntry.html":{"name":"ZipEntry","abstract":"

    Represents either a file or directory entry in ZIP container.

    "},"Classes/ZipContainer.html":{"name":"ZipContainer","abstract":"

    Provides open function for ZIP containers.

    "},"Classes/LZMA.html":{"name":"LZMA","abstract":"

    Provides decompression function for LZMA algorithm.

    "},"Classes/ZlibArchive.html":{"name":"ZlibArchive","abstract":"

    Provides unarchive and archive functions for Zlib archives.

    "},"Classes/Deflate.html":{"name":"Deflate","abstract":"

    Provides compression and decompression functions for Deflate algorithm.

    "},"Classes/BZip2.html":{"name":"BZip2","abstract":"

    Provides decompression function for BZip2 algorithm.

    "},"Classes/TarEntry.html":{"name":"TarEntry","abstract":"

    Represents either a file or directory entry in TAR container.

    "},"Classes/TarContainer.html":{"name":"TarContainer","abstract":"

    Provides open function for TAR containers.

    "},"Classes/XZArchive.html":{"name":"XZArchive","abstract":"

    Provides unarchive function for XZ archives.

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Enums.html":{"name":"Enums","abstract":"

    The following enums are available globally.

    "},"Protocols.html":{"name":"Protocols","abstract":"

    The following protocols are available globally.

    "},"Structs.html":{"name":"Structs","abstract":"

    The following structs are available globally.

    "}} \ No newline at end of file diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/docSet.dsidx b/docs/docsets/SWCompression.docset/Contents/Resources/docSet.dsidx index cf8d3093cd7738dff4afa3b90ce7c6e41e259d2c..81b7f0de81806f6eb8443231552ffeec96028c2b 100644 GIT binary patch delta 6440 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 delta 6225 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�A! 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

    m^44b(bcby0W#PyX`)oBhXVK(hd)?K{p{ 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

    =sj$`~@>|aJCeDv}v+5)FsU!7C6Im-nHI#)L<9c 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 S4iApcK(1Ug-eeV*$^HZUw($A@ diff --git a/docs/index.html b/docs/index.html index 2d2a68f9..acd592b9 100644 --- a/docs/index.html +++ b/docs/index.html @@ -22,7 +22,7 @@ SWCompression Docs - (75% documented) + (100% documented)

    @@ -180,7 +180,7 @@

    CocoaPods Carthage compatible

    -

    A framework which contains implementations of (de)compression algorithms.

    +

    A framework which contains implementations of (de)compression algorithms and functions which parse various archives and containers.

    Developed with Swift.

    Why have you made this framework?

    @@ -203,7 +203,8 @@ And yes, it is also in Objective-C.

  • Containers:
      -
    • ZIP (complying to ISO/IEC 21320 standard)
    • +
    • ZIP
    • +
    • TAR
  • Decompression algorithms: @@ -225,7 +226,7 @@ And yes, it is also in Objective-C.

  • Zlib
  • Platform independent.
  • -
  • Swift only.
  • +
  • Written with Swift only.
  • By the way, it seems like GZip, Deflate and Zlib implementations are specification compliant.

    @@ -246,6 +247,8 @@ Available subspecs:

  • SWCompression/Gzip
  • SWCompression/Zlib
  • SWCompression/BZip2
  • +
  • SWCompression/ZIP
  • +
  • SWCompression/TAR
  • You can add some or all of them instead of pod 'SWCompression'

    @@ -254,7 +257,8 @@ Available subspecs:

    To complete installation, run pod install.

    -

    Note: Actually, there is one more subspec (SWCompression/Common) but it does not contain any end-user functions. It is included in every other subspec and should not be specified directly in Podfile.

    +

    Note: Actually, there is one more subspec (SWCompression/Common) but it does not contain any end-user functions. +It is included in every other subspec and should not be specified directly in Podfile.

    Carthage

    Add to your Cartfile github "tsolomko/SWCompression".

    @@ -270,31 +274,41 @@ Available subspecs:

    let package = Package( name: "PackageName", dependencies: [ - .Package(url: "https://github.com/tsolomko/SWCompression.git", majorVersion: 2) + .Package(url: "https://github.com/tsolomko/SWCompression.git", majorVersion: 3) ] )

    More info about SPM you can find at Swift Package Manager’s Documentation.

    +

    SWCompression/ZIP and compression methods

    + +

    Deflate is a default compression method of ZIP containers.

    + +

    This means, that if you use CocoaPods, when installing SWCompression/ZIP it will install SWCompression/Deflate as a dependency.

    + +

    However, ZIP containers can also support LZMA and BZip2. +So if you want to enable them in your Pods configuration you need to include SWCompression/LZMA and/or SWCompression/Deflate.

    + +

    If you use Carthage or Swift Package Manager you always have the full package, +and ZIP will be built with both BZip2 and LZMA support.

    Usage

    Basics

    If you’d like to decompress deflated data just use:

    let data = try! Data(contentsOf: URL(fileURLWithPath: "path/to/file"),
                          options: .mappedIfSafe)
    -let decompressedData = try? Deflate.decompress(compressedData: data)
    +let decompressedData = try? Deflate.decompress(data: data)
     

    Note: It is highly recommended to specify Data.ReadingOptions.mappedIfSafe, -especially if you are working with large files, -so you don’t run out of system memory.

    +especially if you are working with large files, so you don’t run out of system memory.

    However, it is unlikely that you will encounter deflated data outside of any archive. So, in case of GZip archive you should use:

    let decompressedData = try? GzipArchive.unarchive(archiveData: data)
     
    -

    One final note: every unarchive/decompress function can throw an error and +

    One final note: every SWCompression function can throw an error and you are responsible for handling them.

    Documentation

    @@ -302,8 +316,7 @@ you are responsible for handling them.

    This documentation can be found at its own website.

    Handling Errors

    -

    If you look at list of available error types and their cases, -you may be frightened by their number. +

    If you look at list of available error types and their cases, you may be frightened by their number. However, most of these cases (such as XZError.WrongMagic) exist for diagnostic purposes.

    Thus, you only need to handle the most common type of error for your archive/algorithm. @@ -311,7 +324,7 @@ For example:

    do {
       let data = try Data(contentsOf: URL(fileURLWithPath: "path/to/file"),
                           options: .mappedIfSafe)
    -  let decompressedData = XZArchive.unarchive(archiveData: data)
    +  let decompressedData = XZArchive.unarchive(archive: data)
     } catch let error as XZError {
       <handle XZ related error here>
     } catch let error {
    @@ -340,7 +353,9 @@ so some difference in speed is expected.

    Future plans

      -
    • Tar unarchiving.
    • +
    • Better Deflate compression.
    • +
    • Support for additional attributes in containers.
    • +
    • 7zip containers.
    • BZip2 compression.
    • Something else…
    diff --git a/docs/search.json b/docs/search.json index 0812255e..e6d82172 100644 --- a/docs/search.json +++ b/docs/search.json @@ -1 +1 @@ -{"Structs/ZlibHeader/CompressionLevel.html#/s:FOV13SWCompression10ZlibHeader16CompressionLevel16fastestAlgorithmFMS1_S1_":{"name":"fastestAlgorithm","abstract":"

    Fastest algorithm.

    ","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html#/s:FOV13SWCompression10ZlibHeader16CompressionLevel13fastAlgorithmFMS1_S1_":{"name":"fastAlgorithm","abstract":"

    Fast algorithm.

    ","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html#/s:FOV13SWCompression10ZlibHeader16CompressionLevel16defaultAlgorithmFMS1_S1_":{"name":"defaultAlgorithm","abstract":"

    Default algorithm.

    ","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html#/s:FOV13SWCompression10ZlibHeader16CompressionLevel13slowAlgorithmFMS1_S1_":{"name":"slowAlgorithm","abstract":"

    Slowest algorithm but with maximum compression.

    ","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionMethod.html#/s:FOV13SWCompression10ZlibHeader17CompressionMethod7deflateFMS1_S1_":{"name":"deflate","abstract":"

    The only one supported compression method (Deflate).

    ","parent_name":"CompressionMethod"},"Structs/ZlibHeader/CompressionMethod.html":{"name":"CompressionMethod","abstract":"

    Supported compression methods in zlib archive.

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader/CompressionLevel.html":{"name":"CompressionLevel","abstract":"

    Levels of compression which can be used to create zlib archive.

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:vV13SWCompression10ZlibHeader17compressionMethodOS0_17CompressionMethod":{"name":"compressionMethod","abstract":"

    Compression method of archive. Always equals to .deflate.

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:vV13SWCompression10ZlibHeader16compressionLevelOS0_16CompressionLevel":{"name":"compressionLevel","abstract":"

    Level of compression in the archive.

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:vV13SWCompression10ZlibHeader10windowSizeSi":{"name":"windowSize","abstract":"

    Size of ‘window’: moving interval of data which was used to make the archive

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:FV13SWCompression10ZlibHeadercFzT11archiveDataV10Foundation4Data_S0_":{"name":"init(archiveData:)","abstract":"

    Initializes the structure with the values from zlib archive presented in archiveData.

    ","parent_name":"ZlibHeader"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType4unixFMS1_S1_":{"name":"unix","abstract":"

    One of many Linux systems. (It seems like modern macOS systems also fall into this category).

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType9macintoshFMS1_S1_":{"name":"macintosh","abstract":"

    Older Macintosh (Mac OS, OS X) systems.

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType4ntfsFMS1_S1_":{"name":"ntfs","abstract":"

    File system used in Microsoft™®© Windows™®©.

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType7unknownFMS1_S1_":{"name":"unknown","abstract":"

    File system was unknown to the archiver.

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType5otherFMS1_S1_":{"name":"other","abstract":"

    File system was one of the rare systems..

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/CompressionMethod.html#/s:FOV13SWCompression10GzipHeader17CompressionMethod7deflateFMS1_S1_":{"name":"deflate","abstract":"

    The only one supported compression method (Deflate).

    ","parent_name":"CompressionMethod"},"Structs/GzipHeader/CompressionMethod.html":{"name":"CompressionMethod","abstract":"

    Supported compression methods in gzip archive.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader/FileSystemType.html":{"name":"FileSystemType","abstract":"

    Type of file system on which gzip archive was created.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader17compressionMethodOS0_17CompressionMethod":{"name":"compressionMethod","abstract":"

    Compression method of archive. Always equals to .deflate.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader16modificationTimeGSqV10Foundation4Date_":{"name":"modificationTime","abstract":"

    The most recent modification time of the original file. If set to 0 (default value == unset), then nil.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader6osTypeOS0_14FileSystemType":{"name":"osType","abstract":"

    Type of file system on which compression took place.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader16originalFileNameGSqSS_":{"name":"originalFileName","abstract":"

    Name of the original file.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader7commentGSqSS_":{"name":"comment","abstract":"

    Comment inside the archive.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:FV13SWCompression10GzipHeadercFzT11archiveDataV10Foundation4Data_S0_":{"name":"init(archiveData:)","abstract":"

    Initializes the structure with the values of first ‘member’ in gzip archive presented in archiveData.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html":{"name":"GzipHeader","abstract":"

    A structure which provides information about gzip archive.

    "},"Structs/ZlibHeader.html":{"name":"ZlibHeader","abstract":"

    A structure which provides information about zlib archive.

    "},"Protocols/ContainerEntry.html#/s:vP13SWCompression14ContainerEntry4nameSS":{"name":"name","abstract":"

    Undocumented

    ","parent_name":"ContainerEntry"},"Protocols/ContainerEntry.html#/s:vP13SWCompression14ContainerEntry4sizeSi":{"name":"size","abstract":"

    Undocumented

    ","parent_name":"ContainerEntry"},"Protocols/ContainerEntry.html#/s:vP13SWCompression14ContainerEntry11isDirectorySb":{"name":"isDirectory","abstract":"

    Undocumented

    ","parent_name":"ContainerEntry"},"Protocols/ContainerEntry.html#/s:FP13SWCompression14ContainerEntry4dataFzT_V10Foundation4Data":{"name":"data()","abstract":"

    Undocumented

    ","parent_name":"ContainerEntry"},"Protocols/Container.html#/s:ZFP13SWCompression9Container4openFzT13containerDataV10Foundation4Data_GSaPS_14ContainerEntry__":{"name":"open(containerData:)","abstract":"

    Undocumented

    ","parent_name":"Container"},"Protocols/DecompressionAlgorithm.html#/s:ZFP13SWCompression22DecompressionAlgorithm10decompressFzT14compressedDataV10Foundation4Data_S2_":{"name":"decompress(compressedData:)","abstract":"

    Abstract decompress function.

    ","parent_name":"DecompressionAlgorithm"},"Protocols/Archive.html#/s:ZFP13SWCompression7Archive9unarchiveFzT11archiveDataV10Foundation4Data_S2_":{"name":"unarchive(archiveData:)","abstract":"

    Abstract unarchive function.

    ","parent_name":"Archive"},"Protocols/Archive.html":{"name":"Archive","abstract":"

    Abstract archive class which supports unarchiving.

    "},"Protocols/DecompressionAlgorithm.html":{"name":"DecompressionAlgorithm","abstract":"

    Abstract decompression algorithm class which supports decompression.

    "},"Protocols/Container.html":{"name":"Container","abstract":"

    Undocumented

    "},"Protocols/ContainerEntry.html":{"name":"ContainerEntry","abstract":"

    Undocumented

    "},"Enums/XZError.html#/s:FO13SWCompression7XZError10wrongMagicFMS0_S0_":{"name":"wrongMagic","abstract":"

    Either magic number in header or footer was not equal to predefined value.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError16wrongArchiveInfoFMS0_S0_":{"name":"wrongArchiveInfo","abstract":"

    One of special fields of archive had an incorrect value.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError18fieldReservedValueFMS0_S0_":{"name":"fieldReservedValue","abstract":"

    One of special fields of archive had a reserved value.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError12wrongInfoCRCFMS0_S0_":{"name":"wrongInfoCRC","abstract":"

    Checksum of one of special fields of archive was incorrect.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError13wrongFilterIDFMS0_S0_":{"name":"wrongFilterID","abstract":"

    ID of filter(s) used in archvie was unsupported.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError15checkTypeSHA256FMS0_S0_":{"name":"checkTypeSHA256","abstract":"

    Type of checksum of archive was SHA-256.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError13wrongDataSizeFMS0_S0_":{"name":"wrongDataSize","abstract":"

    Either size of decompressed data was not equal to specified one in block header or","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError10wrongCheckFMS0_FV10Foundation4DataS0_":{"name":"wrongCheck","abstract":"

    Computed checksum of uncompressed data didn’t match the value stored in the archive.","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError12wrongPaddingFMS0_S0_":{"name":"wrongPadding","abstract":"

    Unsupported padding of a structure in the archive.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError21multiByteIntegerErrorFMS0_S0_":{"name":"multiByteIntegerError","abstract":"

    Either null byte encountered or exceeded maximum amount bytes during reading multi byte number.

    ","parent_name":"XZError"},"Enums/TarError.html#/s:FO13SWCompression8TarError20tooSmallFileIsPassedFMS0_S0_":{"name":"tooSmallFileIsPassed","abstract":"

    Undocumented

    ","parent_name":"TarError"},"Enums/TarError.html#/s:FO13SWCompression8TarError16fieldIsNotNumberFMS0_S0_":{"name":"fieldIsNotNumber","abstract":"

    Undocumented

    ","parent_name":"TarError"},"Enums/TarError.html#/s:FO13SWCompression8TarError19wrongHeaderChecksumFMS0_S0_":{"name":"wrongHeaderChecksum","abstract":"

    Undocumented

    ","parent_name":"TarError"},"Enums/TarError.html#/s:FO13SWCompression8TarError17wrongUstarVersionFMS0_S0_":{"name":"wrongUstarVersion","abstract":"

    Undocumented

    ","parent_name":"TarError"},"Enums/TarError.html#/s:FO13SWCompression8TarError19wrongPaxHeaderEntryFMS0_S0_":{"name":"wrongPaxHeaderEntry","abstract":"

    Undocumented

    ","parent_name":"TarError"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error10wrongMagicFMS0_S0_":{"name":"wrongMagic","abstract":"

    Magic number was not 0x425a.

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error22wrongCompressionMethodFMS0_S0_":{"name":"wrongCompressionMethod","abstract":"

    Compression method was not type ‘h’ (not Huffman).

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error14wrongBlockSizeFMS0_S0_":{"name":"wrongBlockSize","abstract":"

    Unknown block size (not from ‘0’ to ‘9’).

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error14wrongBlockTypeFMS0_S0_":{"name":"wrongBlockType","abstract":"

    Unknown block type (was neither ‘pi’ nor ‘sqrt(pi)’).

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error15randomizedBlockFMS0_S0_":{"name":"randomizedBlock","abstract":"

    Block is randomized.

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error18wrongHuffmanGroupsFMS0_S0_":{"name":"wrongHuffmanGroups","abstract":"

    Wrong number of Huffman tables/groups (should be between 2 and 6).

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error13wrongSelectorFMS0_S0_":{"name":"wrongSelector","abstract":"

    Selector was greater than total number of Huffman tables/groups.

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error22wrongHuffmanLengthCodeFMS0_S0_":{"name":"wrongHuffmanLengthCode","abstract":"

    Wrong code of Huffman length (should be between 0 and 20).

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error14symbolNotFoundFMS0_S0_":{"name":"symbolNotFound","abstract":"

    Symbol was not found in Huffman tree.

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error8wrongCRCFMS0_FV10Foundation4DataS0_":{"name":"wrongCRC","abstract":"

    Computed CRC of uncompressed data didn’t match the value stored in the archive.","parent_name":"BZip2Error"},"Enums/DeflateError.html#/s:FO13SWCompression12DeflateError29wrongUncompressedBlockLengthsFMS0_S0_":{"name":"wrongUncompressedBlockLengths","abstract":"

    Uncompressed block’ length and nlength bytes were not compatible.

    ","parent_name":"DeflateError"},"Enums/DeflateError.html#/s:FO13SWCompression12DeflateError14wrongBlockTypeFMS0_S0_":{"name":"wrongBlockType","abstract":"

    Unknown block type (not from 0 to 2).

    ","parent_name":"DeflateError"},"Enums/DeflateError.html#/s:FO13SWCompression12DeflateError11wrongSymbolFMS0_S0_":{"name":"wrongSymbol","abstract":"

    Decoded symbol was found in Huffman tree but is unknown.

    ","parent_name":"DeflateError"},"Enums/DeflateError.html#/s:FO13SWCompression12DeflateError14symbolNotFoundFMS0_S0_":{"name":"symbolNotFound","abstract":"

    Symbol was not found in Huffman tree.

    ","parent_name":"DeflateError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError22wrongCompressionMethodFMS0_S0_":{"name":"wrongCompressionMethod","abstract":"

    Compression method was other than 8 which is the only supported one.

    ","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError20wrongCompressionInfoFMS0_S0_":{"name":"wrongCompressionInfo","abstract":"

    Compression info was greater than 7 which is uncompatible number 8 compression method.

    ","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError11wrongFcheckFMS0_S0_":{"name":"wrongFcheck","abstract":"

    First two bytes were inconsistent with each other.

    ","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError21wrongCompressionLevelFMS0_S0_":{"name":"wrongCompressionLevel","abstract":"

    Compression level was other than 0, 1, 2, 3.

    ","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError12wrongAdler32FMS0_FV10Foundation4DataS0_":{"name":"wrongAdler32","abstract":"

    Computed Adler-32 sum of uncompressed data didn’t match the value stored in the archive.","parent_name":"ZlibError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError15wrongPropertiesFMS0_S0_":{"name":"wrongProperties","abstract":"

    Properties byte was greater than 225.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError21rangeDecoderInitErrorFMS0_S0_":{"name":"rangeDecoderInitError","abstract":"

    Unable to initialize RanderDecorer.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError24exceededUncompressedSizeFMS0_S0_":{"name":"exceededUncompressedSize","abstract":"

    The number of uncompressed bytes hit limit in the middle of decoding.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError13windowIsEmptyFMS0_S0_":{"name":"windowIsEmpty","abstract":"

    Unable to perfrom repeat-distance decoding because there is nothing to repeat.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError23rangeDecoderFinishErrorFMS0_S0_":{"name":"rangeDecoderFinishError","abstract":"

    End of stream marker is reached, but range decoder is in incorrect state.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError16repeatWillExceedFMS0_S0_":{"name":"repeatWillExceed","abstract":"

    The number of bytes to repeat is greater than the amount bytes that is left to decode.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError17notEnoughToRepeatFMS0_S0_":{"name":"notEnoughToRepeat","abstract":"

    The amount of already decoded bytes is smaller than repeat length.

    ","parent_name":"LZMAError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError27notFoundCentralDirectoryEndFMS0_S0_":{"name":"notFoundCentralDirectoryEnd","abstract":"

    End of Central Directoty record was not found.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError14wrongSignatureFMS0_S0_":{"name":"wrongSignature","abstract":"

    Wrong signature of one of ZIP container’s structures.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError9wrongSizeFMS0_S0_":{"name":"wrongSize","abstract":"

    Wrong either compressed or uncompressed size of a ZIP container’s entry.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError12wrongVersionFMS0_S0_":{"name":"wrongVersion","abstract":"

    Wrong number of version needed to extract ZIP container.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError24multiVolumesNotSupportedFMS0_S0_":{"name":"multiVolumesNotSupported","abstract":"

    Archive either spanned or consists of several volumes. This feature is not supported.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError22encryptionNotSupportedFMS0_S0_":{"name":"encryptionNotSupported","abstract":"

    Entry or record is encrypted. This feature is not supported.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError20patchingNotSupportedFMS0_S0_":{"name":"patchingNotSupported","abstract":"

    Entry contains patched data. This feature is not supported.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError23compressionNotSupportedFMS0_S0_":{"name":"compressionNotSupported","abstract":"

    Wrong compression method of an entry.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError16wrongLocalHeaderFMS0_S0_":{"name":"wrongLocalHeader","abstract":"

    Wrong local header of an entry.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError10wrongCRC32FMS0_FV10Foundation4DataS0_":{"name":"wrongCRC32","abstract":"

    Computed CRC32 of entry’s data didn’t match the value stored in the container.","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError14wrongTextFieldFMS0_S0_":{"name":"wrongTextField","abstract":"

    Undocumented

    ","parent_name":"ZipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError10wrongMagicFMS0_S0_":{"name":"wrongMagic","abstract":"

    First two bytes of archive were not 31 and 139.

    ","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError22wrongCompressionMethodFMS0_S0_":{"name":"wrongCompressionMethod","abstract":"

    Compression method was other than 8 which is the only supported one.

    ","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError10wrongFlagsFMS0_S0_":{"name":"wrongFlags","abstract":"

    Reserved flags bits were not equal to 0.

    ","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError14wrongHeaderCRCFMS0_S0_":{"name":"wrongHeaderCRC","abstract":"

    Computed CRC of header didn’t match the value stored in the archive.

    ","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError8wrongCRCFMS0_FV10Foundation4DataS0_":{"name":"wrongCRC","abstract":"

    Computed CRC of uncompressed data didn’t match the value stored in the archive.","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError10wrongISizeFMS0_S0_":{"name":"wrongISize","abstract":"

    Computed isize didn’t match the value stored in the archive.

    ","parent_name":"GzipError"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error15wrongPropertiesFMS0_S0_":{"name":"wrongProperties","abstract":"

    Reserved bits of LZMA2 properties byte were not equal to zero.

    ","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error19wrongDictionarySizeFMS0_S0_":{"name":"wrongDictionarySize","abstract":"

    Dictionary size was too big.

    ","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error16wrongControlByteFMS0_S0_":{"name":"wrongControlByte","abstract":"

    Unknown conrol byte value of LZMA2 packet.

    ","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error10wrongResetFMS0_S0_":{"name":"wrongReset","abstract":"

    Unknown reset instruction encounetered in LZMA2 packet.

    ","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error10wrongSizesFMS0_S0_":{"name":"wrongSizes","abstract":"

    Either size of decompressed data was not equal to specified one in LZMA2 packet or","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html":{"name":"LZMA2Error","abstract":"

    Error happened during LZMA2 decompression."},"Enums/GzipError.html":{"name":"GzipError","abstract":"

    Error happened during unarchiving gzip archive."},"Enums/ZipError.html":{"name":"ZipError","abstract":"

    Error happened during processing ZIP archive (container)."},"Enums/LZMAError.html":{"name":"LZMAError","abstract":"

    Error happened during LZMA decompression."},"Enums/ZlibError.html":{"name":"ZlibError","abstract":"

    Error happened during unarchiving Zlib archive."},"Enums/DeflateError.html":{"name":"DeflateError","abstract":"

    Error happened during deflate decompression."},"Enums/BZip2Error.html":{"name":"BZip2Error","abstract":"

    Error happened during bzip2 decompression."},"Enums/TarError.html":{"name":"TarError","abstract":"

    Error happened during processing TAR archive (container)."},"Enums/XZError.html":{"name":"XZError","abstract":"

    Error happened during unarchiving XZ archive."},"Classes/XZArchive.html#/s:ZFC13SWCompression9XZArchive9unarchiveFzT11archiveDataV10Foundation4Data_S2_":{"name":"unarchive(archiveData:)","abstract":"

    Unarchives xz archive stored in archiveData.

    ","parent_name":"XZArchive"},"Classes/TarContainer.html#/s:ZFC13SWCompression12TarContainer4openFzT13containerDataV10Foundation4Data_GSaPS_14ContainerEntry__":{"name":"open(containerData:)","abstract":"

    Undocumented

    ","parent_name":"TarContainer"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType6normalFMS1_S1_":{"name":"normal","abstract":"

    Undocumented

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType8hardLinkFMS1_S1_":{"name":"hardLink","abstract":"

    Undocumented

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType12symbolicLinkFMS1_S1_":{"name":"symbolicLink","abstract":"

    Undocumented

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType16characterSpecialFMS1_S1_":{"name":"characterSpecial","abstract":"

    Undocumented

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType12blockSpecialFMS1_S1_":{"name":"blockSpecial","abstract":"

    Undocumented

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType9directoryFMS1_S1_":{"name":"directory","abstract":"

    Undocumented

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType4fifoFMS1_S1_":{"name":"fifo","abstract":"

    Undocumented

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType10contiguousFMS1_S1_":{"name":"contiguous","abstract":"

    Undocumented

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType20globalExtendedHeaderFMS1_S1_":{"name":"globalExtendedHeader","abstract":"

    Undocumented

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType19localExtendedHeaderFMS1_S1_":{"name":"localExtendedHeader","abstract":"

    Undocumented

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType23vendorUnknownOrReservedFMS1_S1_":{"name":"vendorUnknownOrReserved","abstract":"

    Undocumented

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html":{"name":"EntryType","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry4nameSS":{"name":"name","abstract":"

    Name of the file or directory.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry11isDirectorySb":{"name":"isDirectory","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry4modeGSqSi_":{"name":"mode","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry7ownerIDGSqSi_":{"name":"ownerID","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry7groupIDGSqSi_":{"name":"groupID","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry4sizeSi":{"name":"size","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry16modificationTimeV10Foundation4Date":{"name":"modificationTime","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry4typeOS0_9EntryType":{"name":"type","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry13ownerUserNameGSqSS_":{"name":"ownerUserName","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry14ownerGroupNameGSqSS_":{"name":"ownerGroupName","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry10accessTimeGSqV10Foundation4Date_":{"name":"accessTime","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry7charsetGSqSS_":{"name":"charset","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry7commentGSqSS_":{"name":"comment","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry8linkPathGSqSS_":{"name":"linkPath","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry28unknownExtendedHeaderEntriesGVs10DictionarySSSS_":{"name":"unknownExtendedHeaderEntries","abstract":"

    Undocumented

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:FC13SWCompression8TarEntry4dataFT_V10Foundation4Data":{"name":"data()","abstract":"

    Returns data associated with this entry.

    ","parent_name":"TarEntry"},"Classes/BZip2.html#/s:ZFC13SWCompression5BZip210decompressFzT14compressedDataV10Foundation4Data_S2_":{"name":"decompress(compressedData:)","abstract":"

    Decompresses compressedData with BZip2 algortihm.

    ","parent_name":"BZip2"},"Classes/Deflate.html#/s:ZFC13SWCompression7Deflate10decompressFzT14compressedDataV10Foundation4Data_S2_":{"name":"decompress(compressedData:)","abstract":"

    Decompresses compressedData with DEFLATE algortihm.

    ","parent_name":"Deflate"},"Classes/Deflate.html#/s:ZFC13SWCompression7Deflate8compressFzT4dataV10Foundation4Data_S2_":{"name":"compress(data:)","abstract":"

    Compresses data with DEFLATE algortihm.

    ","parent_name":"Deflate"},"Classes/ZlibArchive.html#/s:ZFC13SWCompression11ZlibArchive9unarchiveFzT11archiveDataV10Foundation4Data_S2_":{"name":"unarchive(archiveData:)","abstract":"

    Unarchives Zlib archive stored in archiveData.

    ","parent_name":"ZlibArchive"},"Classes/ZlibArchive.html#/s:ZFC13SWCompression11ZlibArchive7archiveFzT4dataV10Foundation4Data_S2_":{"name":"archive(data:)","abstract":"

    Archives data into Zlib archive. Data will be also compressed with DEFLTATE algorithm.","parent_name":"ZlibArchive"},"Classes/LZMA.html#/s:ZFC13SWCompression4LZMA10decompressFzT14compressedDataV10Foundation4Data_S2_":{"name":"decompress(compressedData:)","abstract":"

    Decompresses compressedData with LZMA algortihm.

    ","parent_name":"LZMA"},"Classes/ZipContainer.html#/s:ZFC13SWCompression12ZipContainer4openFzT13containerDataV10Foundation4Data_GSaPS_14ContainerEntry__":{"name":"open(containerData:)","abstract":"

    Processes ZIP archive (container) and returns an array of ContainerEntries (which are actually ZipEntries).","parent_name":"ZipContainer"},"Classes/ZipEntry.html#/s:vC13SWCompression8ZipEntry4nameSS":{"name":"name","abstract":"

    Name of the file or directory.

    ","parent_name":"ZipEntry"},"Classes/ZipEntry.html#/s:vC13SWCompression8ZipEntry7commentGSqSS_":{"name":"comment","abstract":"

    Comment associated with the entry.

    ","parent_name":"ZipEntry"},"Classes/ZipEntry.html#/s:vC13SWCompression8ZipEntry10attributesVs6UInt32":{"name":"attributes","abstract":"

    File or directory attributes related to the file system of archive’s creator.

    ","parent_name":"ZipEntry"},"Classes/ZipEntry.html#/s:vC13SWCompression8ZipEntry4sizeSi":{"name":"size","abstract":"

    Undocumented

    ","parent_name":"ZipEntry"},"Classes/ZipEntry.html#/s:vC13SWCompression8ZipEntry11isDirectorySb":{"name":"isDirectory","abstract":"

    True, if an entry is likely to be a directory.","parent_name":"ZipEntry"},"Classes/ZipEntry.html#/s:FC13SWCompression8ZipEntry4dataFzT_V10Foundation4Data":{"name":"data()","abstract":"

    Returns data associated with this entry.

    ","parent_name":"ZipEntry"},"Classes/GzipArchive.html#/s:ZFC13SWCompression11GzipArchive9unarchiveFzT11archiveDataV10Foundation4Data_S2_":{"name":"unarchive(archiveData:)","abstract":"

    Unarchives gzip archive stored in archiveData.

    ","parent_name":"GzipArchive"},"Classes/GzipArchive.html#/s:ZFC13SWCompression11GzipArchive7archiveFzT4dataV10Foundation4Data_S2_":{"name":"archive(data:)","abstract":"

    Archives data into GZip archive. Data will be also compressed with DEFLTATE algorithm.","parent_name":"GzipArchive"},"Classes/LZMA2.html#/s:ZFC13SWCompression5LZMA210decompressFzT14compressedDataV10Foundation4Data_S2_":{"name":"decompress(compressedData:)","abstract":"

    Decompresses compressedData with LZMA2 algortihm. LZMA2 is a modification of LZMA.

    ","parent_name":"LZMA2"},"Classes/LZMA2.html":{"name":"LZMA2","abstract":"

    Provides function to decompress data, which were compressed with LZMA2

    "},"Classes/GzipArchive.html":{"name":"GzipArchive","abstract":"

    Provides unarchive function for GZip archives.

    "},"Classes/ZipEntry.html":{"name":"ZipEntry","abstract":"

    Represents either a file or directory entry inside ZIP archive.

    "},"Classes/ZipContainer.html":{"name":"ZipContainer","abstract":"

    Provides function which opens ZIP archives (containers).

    "},"Classes/LZMA.html":{"name":"LZMA","abstract":"

    Provides function to decompress data, which were compressed with LZMA

    "},"Classes/ZlibArchive.html":{"name":"ZlibArchive","abstract":"

    Provides unarchive function for Zlib archives.

    "},"Classes/Deflate.html":{"name":"Deflate","abstract":"

    Provides function to decompress data, which were compressed with DEFLATE.

    "},"Classes/BZip2.html":{"name":"BZip2","abstract":"

    Provides function to decompress data, which were compressed using BZip2.

    "},"Classes/TarEntry.html":{"name":"TarEntry","abstract":"

    Represents either a file or directory entry inside TAR archive.

    "},"Classes/TarContainer.html":{"name":"TarContainer","abstract":"

    Provides function which opens TAR archives (containers).

    "},"Classes/XZArchive.html":{"name":"XZArchive","abstract":"

    Provides unarchive function for XZ archives.

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Enums.html":{"name":"Enums","abstract":"

    The following enums are available globally.

    "},"Protocols.html":{"name":"Protocols","abstract":"

    The following protocols are available globally.

    "},"Structs.html":{"name":"Structs","abstract":"

    The following structs are available globally.

    "}} \ No newline at end of file +{"Structs/ZlibHeader/CompressionLevel.html#/s:FOV13SWCompression10ZlibHeader16CompressionLevel16fastestAlgorithmFMS1_S1_":{"name":"fastestAlgorithm","abstract":"

    Fastest algorithm.

    ","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html#/s:FOV13SWCompression10ZlibHeader16CompressionLevel13fastAlgorithmFMS1_S1_":{"name":"fastAlgorithm","abstract":"

    Fast algorithm.

    ","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html#/s:FOV13SWCompression10ZlibHeader16CompressionLevel16defaultAlgorithmFMS1_S1_":{"name":"defaultAlgorithm","abstract":"

    Default algorithm.

    ","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html#/s:FOV13SWCompression10ZlibHeader16CompressionLevel13slowAlgorithmFMS1_S1_":{"name":"slowAlgorithm","abstract":"

    Slowest algorithm but with maximum compression.

    ","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionMethod.html#/s:FOV13SWCompression10ZlibHeader17CompressionMethod7deflateFMS1_S1_":{"name":"deflate","abstract":"

    The only one supported compression method (Deflate).

    ","parent_name":"CompressionMethod"},"Structs/ZlibHeader/CompressionMethod.html":{"name":"CompressionMethod","abstract":"

    Supported compression methods in zlib archive.

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader/CompressionLevel.html":{"name":"CompressionLevel","abstract":"

    Levels of compression which can be used to create Zlib archive.

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:vV13SWCompression10ZlibHeader17compressionMethodOS0_17CompressionMethod":{"name":"compressionMethod","abstract":"

    Compression method of archive. Currently, always equals to .deflate.

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:vV13SWCompression10ZlibHeader16compressionLevelOS0_16CompressionLevel":{"name":"compressionLevel","abstract":"

    Level of compression used in archive.

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:vV13SWCompression10ZlibHeader10windowSizeSi":{"name":"windowSize","abstract":"

    Size of ‘window’: moving interval of data which was used to make archive.

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:FV13SWCompression10ZlibHeadercFzT7archiveV10Foundation4Data_S0_":{"name":"init(archive:)","abstract":"

    Initializes the structure with the values from Zlib archive.

    ","parent_name":"ZlibHeader"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType4unixFMS1_S1_":{"name":"unix","abstract":"

    One of many UNIX-like systems.

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType9macintoshFMS1_S1_":{"name":"macintosh","abstract":"

    Older Macintosh systems.

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType4ntfsFMS1_S1_":{"name":"ntfs","abstract":"

    File system used in Microsoft™®© Windows™®©.

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType7unknownFMS1_S1_":{"name":"unknown","abstract":"

    File system was unknown to the archiver.

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType5otherFMS1_S1_":{"name":"other","abstract":"

    File system is one of the rare systems.

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/CompressionMethod.html#/s:FOV13SWCompression10GzipHeader17CompressionMethod7deflateFMS1_S1_":{"name":"deflate","abstract":"

    The only one supported compression method (Deflate).

    ","parent_name":"CompressionMethod"},"Structs/GzipHeader/CompressionMethod.html":{"name":"CompressionMethod","abstract":"

    Supported compression methods in GZip archive.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader/FileSystemType.html":{"name":"FileSystemType","abstract":"

    Type of file system on which GZip archive was created.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader17compressionMethodOS0_17CompressionMethod":{"name":"compressionMethod","abstract":"

    Compression method of archive. Currently, always equals to .deflate.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader16modificationTimeGSqV10Foundation4Date_":{"name":"modificationTime","abstract":"

    The most recent modification time of the original file.","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader6osTypeOS0_14FileSystemType":{"name":"osType","abstract":"

    Type of file system on which archivation took place.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader8fileNameGSqSS_":{"name":"fileName","abstract":"

    Name of the original file. If archive doesn’t contain file’s name, then nil.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader7commentGSqSS_":{"name":"comment","abstract":"

    Comment stored in archive. If archive doesn’t contain any comment, then nil.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader10isTextFileSb":{"name":"isTextFile","abstract":"

    Check if file is likely to be text file or ASCII-file.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:FV13SWCompression10GzipHeadercFzT7archiveV10Foundation4Data_S0_":{"name":"init(archive:)","abstract":"

    Initializes the structure with the values from the first ‘member’ of GZip archive.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html":{"name":"GzipHeader","abstract":"

    Represents a GZip archive’s header.

    "},"Structs/ZlibHeader.html":{"name":"ZlibHeader","abstract":"

    Represents a Zlib archive’s header.

    "},"Protocols/ContainerEntry.html#/s:vP13SWCompression14ContainerEntry4nameSS":{"name":"name","abstract":"

    Retrieve name of the entry from the container.

    ","parent_name":"ContainerEntry"},"Protocols/ContainerEntry.html#/s:vP13SWCompression14ContainerEntry4sizeSi":{"name":"size","abstract":"

    Retrieve size of the entry’s data from the container.

    ","parent_name":"ContainerEntry"},"Protocols/ContainerEntry.html#/s:vP13SWCompression14ContainerEntry11isDirectorySb":{"name":"isDirectory","abstract":"

    Check if entry is a directory.

    ","parent_name":"ContainerEntry"},"Protocols/ContainerEntry.html#/s:FP13SWCompression14ContainerEntry4dataFzT_V10Foundation4Data":{"name":"data()","abstract":"

    Retrieve entry’s data from the container.

    ","parent_name":"ContainerEntry"},"Protocols/Container.html#/s:ZFP13SWCompression9Container4openFzT9containerV10Foundation4Data_GSaPS_14ContainerEntry__":{"name":"open(container:)","abstract":"

    Retrieve all the entries from the container.

    ","parent_name":"Container"},"Protocols/DecompressionAlgorithm.html#/s:ZFP13SWCompression22DecompressionAlgorithm10decompressFzT4dataV10Foundation4Data_S2_":{"name":"decompress(data:)","abstract":"

    Decompress data compressed with particular algorithm.

    ","parent_name":"DecompressionAlgorithm"},"Protocols/Archive.html#/s:ZFP13SWCompression7Archive9unarchiveFzT7archiveV10Foundation4Data_S2_":{"name":"unarchive(archive:)","abstract":"

    Unarchive data from the archive.

    ","parent_name":"Archive"},"Protocols/Archive.html":{"name":"Archive","abstract":"

    A type that represents an archive.

    "},"Protocols/DecompressionAlgorithm.html":{"name":"DecompressionAlgorithm","abstract":"

    A type that provides an implementation of a particular decompression algorithm.

    "},"Protocols/Container.html":{"name":"Container","abstract":"

    A type that represents a container of files, directories and/or other data.

    "},"Protocols/ContainerEntry.html":{"name":"ContainerEntry","abstract":"

    A type that represents an entry from a container (file or directory) with attributes.

    "},"Enums/XZError.html#/s:FO13SWCompression7XZError10wrongMagicFMS0_S0_":{"name":"wrongMagic","abstract":"

    Either ‘magic’ number in header or footer isn’t equal to a predefined value.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError15wrongFieldValueFMS0_S0_":{"name":"wrongFieldValue","abstract":"

    One of the fields in archive has an incorrect value.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError18fieldReservedValueFMS0_S0_":{"name":"fieldReservedValue","abstract":"

    One of the reserved fields in archive has an unexpected value, which can also mean (apart from damaged archive),","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError12wrongInfoCRCFMS0_S0_":{"name":"wrongInfoCRC","abstract":"

    Checksum of one of the fields of archive doesn’t match the value stored in archive.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError13wrongFilterIDFMS0_S0_":{"name":"wrongFilterID","abstract":"

    Filter used in archvie is unsupported.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError15checkTypeSHA256FMS0_S0_":{"name":"checkTypeSHA256","abstract":"

    Archive uses SHA-256 checksum which is unsupported.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError13wrongDataSizeFMS0_S0_":{"name":"wrongDataSize","abstract":"

    Either size of decompressed data isn’t equal to the one specified in archive or","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError10wrongCheckFMS0_FV10Foundation4DataS0_":{"name":"wrongCheck","abstract":"

    Computed checksum of uncompressed data doesn’t match the value stored in the archive.","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError12wrongPaddingFMS0_S0_":{"name":"wrongPadding","abstract":"

    Padding (null-bytes appended to an archive’s structure) is incorrect.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError21multiByteIntegerErrorFMS0_S0_":{"name":"multiByteIntegerError","abstract":"

    Either null byte encountered or exceeded maximum amount bytes during reading multi byte number.

    ","parent_name":"XZError"},"Enums/TarError.html#/s:FO13SWCompression8TarError20tooSmallFileIsPassedFMS0_S0_":{"name":"tooSmallFileIsPassed","abstract":"

    Size of data is too small, even to contain only one header.

    ","parent_name":"TarError"},"Enums/TarError.html#/s:FO13SWCompression8TarError16fieldIsNotNumberFMS0_S0_":{"name":"fieldIsNotNumber","abstract":"

    Failed to process a field as a number.

    ","parent_name":"TarError"},"Enums/TarError.html#/s:FO13SWCompression8TarError19wrongHeaderChecksumFMS0_S0_":{"name":"wrongHeaderChecksum","abstract":"

    Computed checksum of a header doesn’t match the value stored in container.

    ","parent_name":"TarError"},"Enums/TarError.html#/s:FO13SWCompression8TarError17wrongUstarVersionFMS0_S0_":{"name":"wrongUstarVersion","abstract":"

    Unsupported version of USTAR format.

    ","parent_name":"TarError"},"Enums/TarError.html#/s:FO13SWCompression8TarError19wrongPaxHeaderEntryFMS0_S0_":{"name":"wrongPaxHeaderEntry","abstract":"

    Entry from PAX extended header is in incorrect format.

    ","parent_name":"TarError"},"Enums/TarError.html#/s:FO13SWCompression8TarError14notAsciiStringFMS0_S0_":{"name":"notAsciiString","abstract":"

    Failed to process a field as an ASCII string.

    ","parent_name":"TarError"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error10wrongMagicFMS0_S0_":{"name":"wrongMagic","abstract":"

    ‘Magic’ number is not 0x425a.

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error22wrongCompressionMethodFMS0_S0_":{"name":"wrongCompressionMethod","abstract":"

    Compression method is not type ‘h’ (not Huffman).

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error14wrongBlockSizeFMS0_S0_":{"name":"wrongBlockSize","abstract":"

    Unsupported block size (not from ‘0’ to ‘9’).

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error14wrongBlockTypeFMS0_S0_":{"name":"wrongBlockType","abstract":"

    Unsupported block type (is neither ‘pi’ nor ‘sqrt(pi)’).

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error15randomizedBlockFMS0_S0_":{"name":"randomizedBlock","abstract":"

    Block is randomized.

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error18wrongHuffmanGroupsFMS0_S0_":{"name":"wrongHuffmanGroups","abstract":"

    Wrong number of Huffman tables/groups (should be between 2 and 6).

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error13wrongSelectorFMS0_S0_":{"name":"wrongSelector","abstract":"

    Selector is greater than the total number of Huffman tables/groups.

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error22wrongHuffmanLengthCodeFMS0_S0_":{"name":"wrongHuffmanLengthCode","abstract":"

    Wrong code of Huffman length (should be between 0 and 20).

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error14symbolNotFoundFMS0_S0_":{"name":"symbolNotFound","abstract":"

    Symbol wasn’t found in Huffman tree.

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error8wrongCRCFMS0_FV10Foundation4DataS0_":{"name":"wrongCRC","abstract":"

    Computed checksum of uncompressed data doesn’t match the value stored in archive.","parent_name":"BZip2Error"},"Enums/DeflateError.html#/s:FO13SWCompression12DeflateError29wrongUncompressedBlockLengthsFMS0_S0_":{"name":"wrongUncompressedBlockLengths","abstract":"

    Uncompressed block’s length and nlength bytes isn’t consistent with each other.

    ","parent_name":"DeflateError"},"Enums/DeflateError.html#/s:FO13SWCompression12DeflateError14wrongBlockTypeFMS0_S0_":{"name":"wrongBlockType","abstract":"

    Unknown block type (not 0, 1 or 2).

    ","parent_name":"DeflateError"},"Enums/DeflateError.html#/s:FO13SWCompression12DeflateError11wrongSymbolFMS0_S0_":{"name":"wrongSymbol","abstract":"

    Decoded symbol was found in Huffman tree but is unknown.

    ","parent_name":"DeflateError"},"Enums/DeflateError.html#/s:FO13SWCompression12DeflateError14symbolNotFoundFMS0_S0_":{"name":"symbolNotFound","abstract":"

    Symbol wasn’t found in Huffman tree.

    ","parent_name":"DeflateError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError22wrongCompressionMethodFMS0_S0_":{"name":"wrongCompressionMethod","abstract":"

    Compression method used in archive is different from Deflate, which is the only supported one.

    ","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError20wrongCompressionInfoFMS0_S0_":{"name":"wrongCompressionInfo","abstract":"

    Compression info has value incompatible with Deflate compression method.

    ","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError11wrongFcheckFMS0_S0_":{"name":"wrongFcheck","abstract":"

    First two bytes of archive’s flags are inconsistent with each other.

    ","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError21wrongCompressionLevelFMS0_S0_":{"name":"wrongCompressionLevel","abstract":"

    Compression level has value, which is different from the supported ones.

    ","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError12wrongAdler32FMS0_FV10Foundation4DataS0_":{"name":"wrongAdler32","abstract":"

    Computed checksum of uncompressed data doesn’t match the value stored in archive.","parent_name":"ZlibError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError15wrongPropertiesFMS0_S0_":{"name":"wrongProperties","abstract":"

    Properties’ byte is greater than 225.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError21rangeDecoderInitErrorFMS0_S0_":{"name":"rangeDecoderInitError","abstract":"

    Unable to initialize RanderDecorer.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError24exceededUncompressedSizeFMS0_S0_":{"name":"exceededUncompressedSize","abstract":"

    Size of uncompressed data hit specified limit in the middle of decoding.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError13windowIsEmptyFMS0_S0_":{"name":"windowIsEmpty","abstract":"

    Unable to perfrom repeat-distance decoding because there is nothing to repeat.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError23rangeDecoderFinishErrorFMS0_S0_":{"name":"rangeDecoderFinishError","abstract":"

    End of stream marker is reached, but range decoder is in incorrect state.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError16repeatWillExceedFMS0_S0_":{"name":"repeatWillExceed","abstract":"

    The number of bytes to repeat is greater than the amount bytes that is left to decode.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError17notEnoughToRepeatFMS0_S0_":{"name":"notEnoughToRepeat","abstract":"

    The amount of already decoded bytes is smaller than repeat length.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError23decoderIsNotInitialisedFMS0_S0_":{"name":"decoderIsNotInitialised","abstract":"

    LZMADecoder wasn’t properly initialized before decoding data.

    ","parent_name":"LZMAError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError27notFoundCentralDirectoryEndFMS0_S0_":{"name":"notFoundCentralDirectoryEnd","abstract":"

    End of Central Directoty record wasn’t found.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError14wrongSignatureFMS0_S0_":{"name":"wrongSignature","abstract":"

    Wrong signature of one of container’s structures.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError9wrongSizeFMS0_S0_":{"name":"wrongSize","abstract":"

    Wrong either compressed or uncompressed size of a container’s entry.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError12wrongVersionFMS0_S0_":{"name":"wrongVersion","abstract":"

    Version needed to process container is unsupported.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError24multiVolumesNotSupportedFMS0_S0_":{"name":"multiVolumesNotSupported","abstract":"

    Container is either spanned or consists of several volumes. These features aren’t supported.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError22encryptionNotSupportedFMS0_S0_":{"name":"encryptionNotSupported","abstract":"

    Entry or record is encrypted. This feature isn’t supported.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError20patchingNotSupportedFMS0_S0_":{"name":"patchingNotSupported","abstract":"

    Entry contains patched data. This feature isn’t supported.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError23compressionNotSupportedFMS0_S0_":{"name":"compressionNotSupported","abstract":"

    Entry is compressed using unsupported compression method.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError16wrongLocalHeaderFMS0_S0_":{"name":"wrongLocalHeader","abstract":"

    Local header of an entry is inconsistent with Central Directory.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError10wrongCRC32FMS0_FV10Foundation4DataS0_":{"name":"wrongCRC32","abstract":"

    Computed checksum of entry’s data doesn’t match the value stored in container.","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError14wrongTextFieldFMS0_S0_":{"name":"wrongTextField","abstract":"

    Either entry’s comment or file name cannot be processed using UTF-8 encoding.

    ","parent_name":"ZipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError10wrongMagicFMS0_S0_":{"name":"wrongMagic","abstract":"

    First two bytes (‘magic’ number) of archive isn’t 31 and 139.

    ","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError22wrongCompressionMethodFMS0_S0_":{"name":"wrongCompressionMethod","abstract":"

    Compression method used in archive is different from Deflate, which is the only supported one.

    ","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError10wrongFlagsFMS0_S0_":{"name":"wrongFlags","abstract":"

    One of the reserved fields in archive has an unexpected value, which can also mean (apart from damaged archive),","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError14wrongHeaderCRCFMS0_S0_":{"name":"wrongHeaderCRC","abstract":"

    Computed CRC of archive’s header doesn’t match the value stored in archive.

    ","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError8wrongCRCFMS0_FV10Foundation4DataS0_":{"name":"wrongCRC","abstract":"

    Computed checksum of uncompressed data doesn’t match the value stored in archive.","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError10wrongISizeFMS0_S0_":{"name":"wrongISize","abstract":"

    Computed ‘isize’ didn’t match the value stored in the archive.

    ","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError21cannotEncodeISOLatin1FMS0_S0_":{"name":"cannotEncodeISOLatin1","abstract":"

    Either specified file name or comment cannot be encoded using ISO Latin-1 encoding.

    ","parent_name":"GzipError"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error15wrongPropertiesFMS0_S0_":{"name":"wrongProperties","abstract":"

    Reserved bits of LZMA2 properties’ byte aren’t equal to zero.

    ","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error19wrongDictionarySizeFMS0_S0_":{"name":"wrongDictionarySize","abstract":"

    Dictionary size is too big.

    ","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error16wrongControlByteFMS0_S0_":{"name":"wrongControlByte","abstract":"

    Unknown conrol byte value of LZMA2 packet.

    ","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error10wrongResetFMS0_S0_":{"name":"wrongReset","abstract":"

    Unknown reset instruction encountered in LZMA2 packet.

    ","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error10wrongSizesFMS0_S0_":{"name":"wrongSizes","abstract":"

    Either size of decompressed data isn’t equal to the one specified in LZMA2 packet or","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html":{"name":"LZMA2Error","abstract":"

    Represents an error, which happened during LZMA2 decompression."},"Enums/GzipError.html":{"name":"GzipError","abstract":"

    Represents an error, which happened during processing GZip archive."},"Enums/ZipError.html":{"name":"ZipError","abstract":"

    Represents an error, which happened during processing ZIP container."},"Enums/LZMAError.html":{"name":"LZMAError","abstract":"

    Represents an error, which happened during LZMA decompression."},"Enums/ZlibError.html":{"name":"ZlibError","abstract":"

    Represents an error, which happened during processing Zlib archive."},"Enums/DeflateError.html":{"name":"DeflateError","abstract":"

    Represents an error, which happened during Deflate compression or decompression."},"Enums/BZip2Error.html":{"name":"BZip2Error","abstract":"

    Represents an error, which happened during BZip2 decompression."},"Enums/TarError.html":{"name":"TarError","abstract":"

    Represents an error, which happened during processing TAR container."},"Enums/XZError.html":{"name":"XZError","abstract":"

    Represents an error, which happened during unarchiving XZ archive."},"Classes/XZArchive.html#/s:ZFC13SWCompression9XZArchive9unarchiveFzT7archiveV10Foundation4Data_S2_":{"name":"unarchive(archive:)","abstract":"

    Unarchives XZ archive.

    ","parent_name":"XZArchive"},"Classes/TarContainer.html#/s:ZFC13SWCompression12TarContainer4openFzT9containerV10Foundation4Data_GSaPS_14ContainerEntry__":{"name":"open(container:)","abstract":"

    Processes TAR container and returns an array of ContainerEntries (which are actually TarEntries).

    ","parent_name":"TarContainer"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType6normalFMS1_S1_":{"name":"normal","abstract":"

    Normal file.

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType8hardLinkFMS1_S1_":{"name":"hardLink","abstract":"

    Hard linked entry.

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType12symbolicLinkFMS1_S1_":{"name":"symbolicLink","abstract":"

    Symbolically linked entry.

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType16characterSpecialFMS1_S1_":{"name":"characterSpecial","abstract":"

    Character special file.

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType12blockSpecialFMS1_S1_":{"name":"blockSpecial","abstract":"

    Block special file.

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType9directoryFMS1_S1_":{"name":"directory","abstract":"

    Directory.

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType4fifoFMS1_S1_":{"name":"fifo","abstract":"

    FIFO special file.

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType10contiguousFMS1_S1_":{"name":"contiguous","abstract":"

    Contiguous file.

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType20globalExtendedHeaderFMS1_S1_":{"name":"globalExtendedHeader","abstract":"

    PAX global extended header. (Should not be encountered separately).

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType19localExtendedHeaderFMS1_S1_":{"name":"localExtendedHeader","abstract":"

    PAX local extended header. (Should not be encountered separately).

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html#/s:FOC13SWCompression8TarEntry9EntryType23vendorUnknownOrReservedFMS1_S1_":{"name":"vendorUnknownOrReserved","abstract":"

    Either unknown type, vendor specific or reserved value.

    ","parent_name":"EntryType"},"Classes/TarEntry/EntryType.html":{"name":"EntryType","abstract":"

    Represents a type of an entry.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry4nameSS":{"name":"name","abstract":"

    Name of the file or directory.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry11isDirectorySb":{"name":"isDirectory","abstract":"

    True, if an entry is a directory.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry4sizeSi":{"name":"size","abstract":"

    Size of the data associated with the entry.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry4modeGSqSi_":{"name":"mode","abstract":"

    File mode.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry7ownerIDGSqSi_":{"name":"ownerID","abstract":"

    Owner’s ID.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry7groupIDGSqSi_":{"name":"groupID","abstract":"

    Owner’s group ID.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry16modificationTimeV10Foundation4Date":{"name":"modificationTime","abstract":"

    The most recent modification time of the original file or directory.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry4typeOS0_9EntryType":{"name":"type","abstract":"

    Type of entry.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry13ownerUserNameGSqSS_":{"name":"ownerUserName","abstract":"

    Owner’s user name.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry14ownerGroupNameGSqSS_":{"name":"ownerGroupName","abstract":"

    Owner’s group name.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry10accessTimeGSqV10Foundation4Date_":{"name":"accessTime","abstract":"

    The most recent access time of the original file or directory (PAX only).

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry7charsetGSqSS_":{"name":"charset","abstract":"

    Name of the character set used to encode entry’s data (PAX only).

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry7commentGSqSS_":{"name":"comment","abstract":"

    Comment associated with the entry (PAX only).

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry8linkPathGSqSS_":{"name":"linkPath","abstract":"

    Path to linked entry (PAX only).

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:vC13SWCompression8TarEntry28unknownExtendedHeaderEntriesGVs10DictionarySSSS_":{"name":"unknownExtendedHeaderEntries","abstract":"

    Other entries from PAX extended headers.

    ","parent_name":"TarEntry"},"Classes/TarEntry.html#/s:FC13SWCompression8TarEntry4dataFT_V10Foundation4Data":{"name":"data()","abstract":"

    Returns data associated with this entry.

    ","parent_name":"TarEntry"},"Classes/BZip2.html#/s:ZFC13SWCompression5BZip210decompressFzT4dataV10Foundation4Data_S2_":{"name":"decompress(data:)","abstract":"

    Decompresses data using BZip2 algortihm.

    ","parent_name":"BZip2"},"Classes/Deflate.html#/s:ZFC13SWCompression7Deflate10decompressFzT4dataV10Foundation4Data_S2_":{"name":"decompress(data:)","abstract":"

    Decompresses data using Deflate algortihm.

    ","parent_name":"Deflate"},"Classes/Deflate.html#/s:ZFC13SWCompression7Deflate8compressFzT4dataV10Foundation4Data_S2_":{"name":"compress(data:)","abstract":"

    Compresses data with Deflate algortihm.

    ","parent_name":"Deflate"},"Classes/ZlibArchive.html#/s:ZFC13SWCompression11ZlibArchive9unarchiveFzT7archiveV10Foundation4Data_S2_":{"name":"unarchive(archive:)","abstract":"

    Unarchives Zlib archive.

    ","parent_name":"ZlibArchive"},"Classes/ZlibArchive.html#/s:ZFC13SWCompression11ZlibArchive7archiveFzT4dataV10Foundation4Data_S2_":{"name":"archive(data:)","abstract":"

    Archives data into Zlib archive.","parent_name":"ZlibArchive"},"Classes/LZMA.html#/s:ZFC13SWCompression4LZMA10decompressFzT4dataV10Foundation4Data_S2_":{"name":"decompress(data:)","abstract":"

    Decompresses data using LZMA algortihm.

    ","parent_name":"LZMA"},"Classes/ZipContainer.html#/s:ZFC13SWCompression12ZipContainer4openFzT9containerV10Foundation4Data_GSaPS_14ContainerEntry__":{"name":"open(container:)","abstract":"

    Processes ZIP container and returns an array of ContainerEntries (which are actually ZipEntries).

    ","parent_name":"ZipContainer"},"Classes/ZipEntry.html#/s:vC13SWCompression8ZipEntry4nameSS":{"name":"name","abstract":"

    Name of the file or directory.

    ","parent_name":"ZipEntry"},"Classes/ZipEntry.html#/s:vC13SWCompression8ZipEntry7commentGSqSS_":{"name":"comment","abstract":"

    Comment associated with the entry.

    ","parent_name":"ZipEntry"},"Classes/ZipEntry.html#/s:vC13SWCompression8ZipEntry10attributesVs6UInt32":{"name":"attributes","abstract":"

    File or directory attributes related to the file system of the container’s creator.

    ","parent_name":"ZipEntry"},"Classes/ZipEntry.html#/s:vC13SWCompression8ZipEntry4sizeSi":{"name":"size","abstract":"

    Size of the data associated with the entry.

    ","parent_name":"ZipEntry"},"Classes/ZipEntry.html#/s:vC13SWCompression8ZipEntry11isDirectorySb":{"name":"isDirectory","abstract":"

    True, if an entry is a directory.","parent_name":"ZipEntry"},"Classes/ZipEntry.html#/s:FC13SWCompression8ZipEntry4dataFzT_V10Foundation4Data":{"name":"data()","abstract":"

    Returns data associated with this entry.

    ","parent_name":"ZipEntry"},"Classes/GzipArchive.html#/s:ZFC13SWCompression11GzipArchive9unarchiveFzT7archiveV10Foundation4Data_S2_":{"name":"unarchive(archive:)","abstract":"

    Unarchives GZip archive.

    ","parent_name":"GzipArchive"},"Classes/GzipArchive.html#/s:ZFC13SWCompression11GzipArchive7archiveFzT4dataV10Foundation4Data7commentGSqSS_8fileNameGSqSS_14writeHeaderCRCSb10isTextFileSb6osTypeGSqOVS_10GzipHeader14FileSystemType_16modificationTimeGSqVS1_4Date__S2_":{"name":"archive(data:comment:fileName:writeHeaderCRC:isTextFile:osType:modificationTime:)","abstract":"

    Archives data into GZip archive, using various specified options.","parent_name":"GzipArchive"},"Classes/LZMA2.html#/s:ZFC13SWCompression5LZMA210decompressFzT4dataV10Foundation4Data_S2_":{"name":"decompress(data:)","abstract":"

    Decompresses data using LZMA2 algortihm.

    ","parent_name":"LZMA2"},"Classes/LZMA2.html":{"name":"LZMA2","abstract":"

    Provides decompression function for LZMA2 algorithm.

    "},"Classes/GzipArchive.html":{"name":"GzipArchive","abstract":"

    Provides unarchive and archive functions for GZip archives.

    "},"Classes/ZipEntry.html":{"name":"ZipEntry","abstract":"

    Represents either a file or directory entry in ZIP container.

    "},"Classes/ZipContainer.html":{"name":"ZipContainer","abstract":"

    Provides open function for ZIP containers.

    "},"Classes/LZMA.html":{"name":"LZMA","abstract":"

    Provides decompression function for LZMA algorithm.

    "},"Classes/ZlibArchive.html":{"name":"ZlibArchive","abstract":"

    Provides unarchive and archive functions for Zlib archives.

    "},"Classes/Deflate.html":{"name":"Deflate","abstract":"

    Provides compression and decompression functions for Deflate algorithm.

    "},"Classes/BZip2.html":{"name":"BZip2","abstract":"

    Provides decompression function for BZip2 algorithm.

    "},"Classes/TarEntry.html":{"name":"TarEntry","abstract":"

    Represents either a file or directory entry in TAR container.

    "},"Classes/TarContainer.html":{"name":"TarContainer","abstract":"

    Provides open function for TAR containers.

    "},"Classes/XZArchive.html":{"name":"XZArchive","abstract":"

    Provides unarchive function for XZ archives.

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Enums.html":{"name":"Enums","abstract":"

    The following enums are available globally.

    "},"Protocols.html":{"name":"Protocols","abstract":"

    The following protocols are available globally.

    "},"Structs.html":{"name":"Structs","abstract":"

    The following structs are available globally.

    "}} \ No newline at end of file diff --git a/docs/undocumented.json b/docs/undocumented.json index 3ffe176b..1862018e 100644 --- a/docs/undocumented.json +++ b/docs/undocumented.json @@ -1,292 +1,6 @@ { "warnings": [ - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/Protocols.swift", - "line": 27, - "symbol": "Container", - "symbol_kind": "source.lang.swift.decl.protocol", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/Protocols.swift", - "line": 29, - "symbol": "Container.open(containerData:)", - "symbol_kind": "source.lang.swift.decl.function.method.static", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/Protocols.swift", - "line": 33, - "symbol": "ContainerEntry", - "symbol_kind": "source.lang.swift.decl.protocol", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/Protocols.swift", - "line": 35, - "symbol": "ContainerEntry.name", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/Protocols.swift", - "line": 36, - "symbol": "ContainerEntry.size", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/Protocols.swift", - "line": 37, - "symbol": "ContainerEntry.isDirectory", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/Protocols.swift", - "line": 39, - "symbol": "ContainerEntry.data()", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 18, - "symbol": "TarError.tooSmallFileIsPassed", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 19, - "symbol": "TarError.fieldIsNotNumber", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 20, - "symbol": "TarError.wrongHeaderChecksum", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 21, - "symbol": "TarError.wrongUstarVersion", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 22, - "symbol": "TarError.wrongPaxHeaderEntry", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 28, - "symbol": "TarEntry.EntryType", - "symbol_kind": "source.lang.swift.decl.enum", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 29, - "symbol": "TarEntry.EntryType.normal", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 30, - "symbol": "TarEntry.EntryType.hardLink", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 31, - "symbol": "TarEntry.EntryType.symbolicLink", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 32, - "symbol": "TarEntry.EntryType.characterSpecial", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 33, - "symbol": "TarEntry.EntryType.blockSpecial", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 34, - "symbol": "TarEntry.EntryType.directory", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 35, - "symbol": "TarEntry.EntryType.fifo", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 36, - "symbol": "TarEntry.EntryType.contiguous", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 37, - "symbol": "TarEntry.EntryType.globalExtendedHeader", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 38, - "symbol": "TarEntry.EntryType.localExtendedHeader", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 39, - "symbol": "TarEntry.EntryType.vendorUnknownOrReserved", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 47, - "symbol": "TarEntry.isDirectory", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 51, - "symbol": "TarEntry.mode", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 52, - "symbol": "TarEntry.ownerID", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 53, - "symbol": "TarEntry.groupID", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 54, - "symbol": "TarEntry.size", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 55, - "symbol": "TarEntry.modificationTime", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 56, - "symbol": "TarEntry.type", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 58, - "symbol": "TarEntry.ownerUserName", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 59, - "symbol": "TarEntry.ownerGroupName", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 69, - "symbol": "TarEntry.accessTime", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 70, - "symbol": "TarEntry.charset", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 71, - "symbol": "TarEntry.comment", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 72, - "symbol": "TarEntry.linkPath", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 73, - "symbol": "TarEntry.unknownExtendedHeaderEntries", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/TarContainer.swift", - "line": 293, - "symbol": "TarContainer.open(containerData:)", - "symbol_kind": "source.lang.swift.decl.function.method.static", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/ZipContainer.swift", - "line": 51, - "symbol": "ZipError.wrongTextField", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/ZipContainer.swift", - "line": 75, - "symbol": "ZipEntry.size", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - } + ], "source_directory": "/Users/timofeysolomko/Developer/SWCompression" } \ No newline at end of file