Files
2026-06-13 11:38:18 +00:00

438 lines
22 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en">
<head>
<title>TarReader Structure Reference</title>
<link rel="stylesheet" type="text/css" href="../css/jazzy.css" />
<link rel="stylesheet" type="text/css" href="../css/highlight.css" />
<meta charset="utf-8">
<script src="../js/jquery.min.js" defer></script>
<script src="../js/jazzy.js" defer></script>
<script src="../js/lunr.min.js" defer></script>
<script src="../js/typeahead.jquery.js" defer></script>
<script src="../js/jazzy.search.js" defer></script>
</head>
<body>
<a name="//apple_ref/swift/Struct/TarReader" class="dashAnchor"></a>
<a title="TarReader Structure Reference"></a>
<header class="header">
<p class="header-col header-col--primary">
<a class="header-link" href="../index.html">
SWCompression 4.9.1 Docs
</a>
(100% documented)
</p>
<div class="header-col--secondary">
<form role="search" action="../search.json">
<input type="text" placeholder="Search documentation" data-typeahead>
</form>
</div>
<p class="header-col header-col--secondary">
<a class="header-link" href="https://github.com/tsolomko/SWCompression">
<img class="header-icon" src="../img/gh.png" alt="GitHub"/>
View on GitHub
</a>
</p>
</header>
<p class="breadcrumbs">
<a class="breadcrumb" href="../index.html">SWCompression</a>
<img class="carat" src="../img/carat.png" alt=""/>
<a class="breadcrumb" href="../TAR.html">TAR</a>
<img class="carat" src="../img/carat.png" alt=""/>
TarReader Structure Reference
</p>
<div class="content-wrapper">
<nav class="navigation">
<ul class="nav-groups">
<li class="nav-group-name">
<a class="nav-group-name-link" href="../Compression.html">Compression</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/BZip2.html">BZip2</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/BZip2/BlockSize.html"> BlockSize</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/Deflate.html">Deflate</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/LZMA.html">LZMA</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/LZMAProperties.html">LZMAProperties</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/LZMA2.html">LZMA2</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/LZ4.html">LZ4</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a class="nav-group-name-link" href="../Archives.html">Archives</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/GzipArchive.html">GzipArchive</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/GzipArchive/Member.html"> Member</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/GzipHeader.html">GzipHeader</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/GzipHeader/ExtraField.html"> ExtraField</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/XZArchive.html">XZArchive</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/ZlibArchive.html">ZlibArchive</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/ZlibHeader.html">ZlibHeader</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/ZlibHeader/CompressionLevel.html"> CompressionLevel</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a class="nav-group-name-link" href="../7-Zip.html">7-Zip</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/SevenZipContainer.html">SevenZipContainer</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/SevenZipEntry.html">SevenZipEntry</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/SevenZipEntryInfo.html">SevenZipEntryInfo</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a class="nav-group-name-link" href="../TAR.html">TAR</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/TarContainer.html">TarContainer</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/TarContainer/Format.html"> Format</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/TarReader.html">TarReader</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/TarWriter.html">TarWriter</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/TarEntry.html">TarEntry</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/TarEntryInfo.html">TarEntryInfo</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a class="nav-group-name-link" href="../ZIP.html">ZIP</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/ZipContainer.html">ZipContainer</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/ZipEntry.html">ZipEntry</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/ZipEntryInfo.html">ZipEntryInfo</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Protocols/ZipExtraField.html">ZipExtraField</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/ZipExtraFieldLocation.html">ZipExtraFieldLocation</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a class="nav-group-name-link" href="../Errors.html">Errors</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/BZip2Error.html">BZip2Error</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/DataError.html">DataError</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/DeflateError.html">DeflateError</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/GzipError.html">GzipError</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/LZMAError.html">LZMAError</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/LZMA2Error.html">LZMA2Error</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/SevenZipError.html">SevenZipError</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/TarCreateError.html">TarCreateError</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/TarError.html">TarError</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/XZError.html">XZError</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/ZipError.html">ZipError</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/ZlibError.html">ZlibError</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a class="nav-group-name-link" href="../Protocols.html">Protocols</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Protocols/Archive.html">Archive</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Protocols/Container.html">Container</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Protocols/ContainerEntry.html">ContainerEntry</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Protocols/ContainerEntryInfo.html">ContainerEntryInfo</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Protocols/CompressionAlgorithm.html">CompressionAlgorithm</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Protocols/DecompressionAlgorithm.html">DecompressionAlgorithm</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a class="nav-group-name-link" href="../Common%20Auxiliary%20Types.html">Common Auxiliary Types</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/ContainerEntryType.html">ContainerEntryType</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/DosAttributes.html">DosAttributes</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/Permissions.html">Permissions</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/CompressionMethod.html">CompressionMethod</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/FileSystemType.html">FileSystemType</a>
</li>
</ul>
</li>
</ul>
</nav>
<article class="main-content">
<section class="section">
<div class="section-content top-matter">
<h1>TarReader</h1>
<div class="declaration">
<div class="language">
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">struct</span> <span class="kt">TarReader</span></code></pre>
</div>
</div>
<p>A type that allows to iteratively read TAR entries from a container provided by a <code>FileHandle</code>.</p>
<p>The <code>TarReader</code> may be helpful in reducing the peak memory usage on certain platforms. However, to achieve this either
the <code><a href="../Structs/TarReader.html#/s:13SWCompression9TarReaderV7processyxxAA0B5EntryVSgKXEKlF">TarReader.process(_:)</a></code> function should be used or both the call to <code><a href="../Structs/TarReader.html#/s:13SWCompression9TarReaderV4readAA0B5EntryVSgyKF">TarReader.read()</a></code> and the processing of the
returned entry should be wrapped inside the <code>autoreleasepool</code>. Since the <code>autoreleasepool</code> is available only on Darwin
platforms, the memory reducing effect may be not as significant on non-Darwin platforms (such as Linux or Windows).</p>
<p>The following code demonstrates an example usage of the <code>TarReader</code>:</p>
<pre class="highlight swift"><code> <span class="k">let</span> <span class="nv">handle</span><span class="p">:</span> <span class="kt">FileHandle</span> <span class="o">=</span> <span class="o">...</span>
<span class="k">let</span> <span class="nv">reader</span> <span class="o">=</span> <span class="kt">TarReader</span><span class="p">(</span><span class="nv">fileHandle</span><span class="p">:</span> <span class="n">handle</span><span class="p">)</span>
<span class="k">try</span> <span class="n">reader</span><span class="o">.</span><span class="n">process</span> <span class="p">{</span> <span class="o">...</span> <span class="p">}</span>
<span class="o">...</span>
<span class="k">try</span> <span class="n">handle</span><span class="o">.</span><span class="nf">close</span><span class="p">()</span>
</code></pre>
<p>Note that closing the <code>FileHandle</code> remains the responsibility of the caller.</p>
<div class="slightly-smaller">
<a href="https://github.com/tsolomko/SWCompression/tree/4.9.1/Sources/TAR/TarReader.swift#L27-L157">Show on GitHub</a>
</div>
</div>
</section>
<section class="section">
<div class="section-content">
<div class="task-group">
<ul class="item-container">
<li class="item">
<div>
<code>
<a name="/s:13SWCompression9TarReaderV10fileHandleACSo06NSFileE0C_tcfc"></a>
<a name="//apple_ref/swift/Method/init(fileHandle:)" class="dashAnchor"></a>
<a class="token" href="#/s:13SWCompression9TarReaderV10fileHandleACSo06NSFileE0C_tcfc">init(fileHandle:<wbr>)</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Creates a new instance for reading TAR entries from the provided <code>fileHandle</code>.</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="nf">init</span><span class="p">(</span><span class="nv">fileHandle</span><span class="p">:</span> <span class="kt">FileHandle</span><span class="p">)</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>fileHandle</em>
</code>
</td>
<td>
<div>
<p>A handle from which the entries will be read. Note that the <code>TarReader</code> does not close the
<code>fileHandle</code> and this remains the responsibility of the caller.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="slightly-smaller">
<a href="https://github.com/tsolomko/SWCompression/tree/4.9.1/Sources/TAR/TarReader.swift#L41-L47">Show on GitHub</a>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/s:13SWCompression9TarReaderV7processyxxAA0B5EntryVSgKXEKlF"></a>
<a name="//apple_ref/swift/Method/process(_:)" class="dashAnchor"></a>
<a class="token" href="#/s:13SWCompression9TarReaderV7processyxxAA0B5EntryVSgKXEKlF">process(_:<wbr>)</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Processes the next TAR entry by reading it from the container and calling the provided closure on the result. If
the argument supplied to the closure is <code>nil</code> this indicates that the end of the input was reached.</p>
<p>On Darwin platforms both the reading and the call to the closure are performed inside the <code>autoreleasepool</code> which
allows to reduce the peak memory usage.</p>
<div class="aside aside-throws">
<p class="aside-title">Throws</p>
<code><a href="../Enums/DataError.html#/s:13SWCompression9DataErrorO9truncatedyA2CmF">DataError.truncated</a></code> if the input is truncated. <code><a href="../Enums/TarError.html">TarError</a></code> is thrown in case of malformed input. Errors
thrown by <code>FileHandle</code> operations are also propagated.
</div>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="k">mutating</span> <span class="kd">func</span> <span class="n">process</span><span class="o">&lt;</span><span class="kt">T</span><span class="o">&gt;</span><span class="p">(</span><span class="n">_</span> <span class="nv">transform</span><span class="p">:</span> <span class="p">(</span><span class="kt"><a href="../Structs/TarEntry.html">TarEntry</a></span><span class="p">?)</span> <span class="k">throws</span> <span class="o">-&gt;</span> <span class="kt">T</span><span class="p">)</span> <span class="k">throws</span> <span class="o">-&gt;</span> <span class="kt">T</span></code></pre>
</div>
</div>
<div class="slightly-smaller">
<a href="https://github.com/tsolomko/SWCompression/tree/4.9.1/Sources/TAR/TarReader.swift#L59-L64">Show on GitHub</a>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/s:13SWCompression9TarReaderV4readAA0B5EntryVSgyKF"></a>
<a name="//apple_ref/swift/Method/read()" class="dashAnchor"></a>
<a class="token" href="#/s:13SWCompression9TarReaderV4readAA0B5EntryVSgyKF">read()</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Reads the next TAR entry from the container.</p>
<p>On Darwin platforms it is recommended to wrap both the call to this function and the follow-up processing inside
the <code>autoreleasepool</code> in order to reduce the peak memory usage.</p>
<div class="aside aside-throws">
<p class="aside-title">Throws</p>
<p><code><a href="../Enums/DataError.html#/s:13SWCompression9DataErrorO9truncatedyA2CmF">DataError.truncated</a></code> if the input is truncated. <code><a href="../Enums/TarError.html">TarError</a></code> is thrown in case of malformed input. Errors
thrown by <code>FileHandle</code> operations are also propagated.</p>
</div>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="k">mutating</span> <span class="kd">func</span> <span class="nf">read</span><span class="p">()</span> <span class="k">throws</span> <span class="o">-&gt;</span> <span class="kt"><a href="../Structs/TarEntry.html">TarEntry</a></span><span class="p">?</span></code></pre>
</div>
</div>
<div>
<h4>Return Value</h4>
<p>The next entry from the container or <code>nil</code> if the end of the input has been reached.</p>
</div>
<div class="slightly-smaller">
<a href="https://github.com/tsolomko/SWCompression/tree/4.9.1/Sources/TAR/TarReader.swift#L77-L139">Show on GitHub</a>
</div>
</section>
</div>
</li>
</ul>
</div>
</div>
</section>
</article>
</div>
<section class="footer">
<p>© 2026 Timofey Solomko</p>
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external noopener">jazzy ♪♫ v0.15.4</a>, a <a class="link" href="https://realm.io" target="_blank" rel="external noopener">Realm</a> project.</p>
</section>
</body>
</html>