|
378 | 378 | <span id="372">372</span>
|
379 | 379 | <span id="373">373</span>
|
380 | 380 | <span id="374">374</span>
|
381 |
| -<span id="375">375</span> |
382 |
| -<span id="376">376</span> |
383 |
| -<span id="377">377</span> |
384 |
| -<span id="378">378</span> |
385 |
| -<span id="379">379</span> |
386 |
| -<span id="380">380</span> |
387 |
| -<span id="381">381</span> |
388 |
| -<span id="382">382</span> |
389 |
| -<span id="383">383</span> |
390 |
| -<span id="384">384</span> |
391 | 381 | </pre><pre class="rust"><code><span class="comment">// * This file is part of the uutils coreutils package.</span>
|
392 | 382 | <span class="comment">// *</span>
|
393 | 383 | <span class="comment">// * For the full copyright and license information, please view the LICENSE</span>
|
|
468 | 458 | <span class="doccomment">/// settings of `mode`, this function will update the number of</span>
|
469 | 459 | <span class="doccomment">/// records truncated; that's why `rstat` is borrowed mutably.</span>
|
470 | 460 | <span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn</span> <span class="ident">conv_block_unblock_helper</span>(
|
471 |
| - <span class="kw-2">mut</span> <span class="ident">buf</span>: <span class="ident">Vec</span><span class="op"><</span><span class="ident">u8</span><span class="op">></span>, |
| 461 | + <span class="ident">buf</span>: <span class="ident">Vec</span><span class="op"><</span><span class="ident">u8</span><span class="op">></span>, |
472 | 462 | <span class="ident">mode</span>: <span class="kw-2">&</span><span class="ident">ConversionMode</span>,
|
473 | 463 | <span class="ident">rstat</span>: <span class="kw-2">&mut</span> <span class="ident">ReadStat</span>,
|
474 | 464 | ) -> <span class="ident">Vec</span><span class="op"><</span><span class="ident">u8</span><span class="op">></span> {
|
475 |
| - <span class="comment">// TODO This function has a mutable input `buf` but also returns a</span> |
476 |
| - <span class="comment">// completely new `Vec`; that seems fishy. Could we either make</span> |
477 |
| - <span class="comment">// the input immutable or make the function not return anything?</span> |
478 |
| - |
479 |
| - <span class="kw">fn</span> <span class="ident">apply_conversion</span>(<span class="ident">buf</span>: <span class="kw-2">&mut</span> [<span class="ident">u8</span>], <span class="ident">ct</span>: <span class="kw-2">&</span><span class="ident">ConversionTable</span>) { |
480 |
| - <span class="kw">for</span> <span class="ident">idx</span> <span class="kw">in</span> <span class="number">0</span>..<span class="ident">buf</span>.<span class="ident">len</span>() { |
481 |
| - <span class="ident">buf</span>[<span class="ident">idx</span>] <span class="op">=</span> <span class="ident">ct</span>[<span class="ident">buf</span>[<span class="ident">idx</span>] <span class="kw">as</span> <span class="ident">usize</span>]; |
482 |
| - } |
| 465 | + <span class="kw">fn</span> <span class="ident">apply_conversion</span>(<span class="ident">buf</span>: <span class="ident">Vec</span><span class="op"><</span><span class="ident">u8</span><span class="op">></span>, <span class="ident">ct</span>: <span class="kw-2">&</span><span class="ident">ConversionTable</span>) -> <span class="kw">impl</span> <span class="ident">Iterator</span><span class="op"><</span><span class="ident">Item</span> <span class="op">=</span> <span class="ident">u8</span><span class="op">></span> <span class="op">+</span> <span class="lifetime">'_</span> { |
| 466 | + <span class="ident">buf</span>.<span class="ident">into_iter</span>().<span class="ident">map</span>(<span class="op">|</span><span class="ident">b</span><span class="op">|</span> <span class="ident">ct</span>[<span class="ident">b</span> <span class="kw">as</span> <span class="ident">usize</span>]) |
483 | 467 | }
|
484 | 468 |
|
485 | 469 | <span class="kw">match</span> <span class="ident">mode</span> {
|
486 |
| - <span class="ident">ConversionMode::ConvertOnly</span>(<span class="ident">ct</span>) => { |
487 |
| - <span class="ident">apply_conversion</span>(<span class="kw-2">&mut</span> <span class="ident">buf</span>, <span class="ident">ct</span>); |
488 |
| - <span class="ident">buf</span> |
489 |
| - } |
| 470 | + <span class="ident">ConversionMode::ConvertOnly</span>(<span class="ident">ct</span>) => <span class="ident">apply_conversion</span>(<span class="ident">buf</span>, <span class="ident">ct</span>).<span class="ident">collect</span>(), |
490 | 471 | <span class="ident">ConversionMode::BlockThenConvert</span>(<span class="ident">ct</span>, <span class="ident">cbs</span>, <span class="ident">sync</span>) => {
|
491 |
| - <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">blocks</span> <span class="op">=</span> <span class="ident">block</span>(<span class="kw-2">&</span><span class="ident">buf</span>, <span class="kw-2">*</span><span class="ident">cbs</span>, <span class="kw-2">*</span><span class="ident">sync</span>, <span class="ident">rstat</span>); |
492 |
| - <span class="kw">for</span> <span class="ident">buf</span> <span class="kw">in</span> <span class="kw-2">&mut</span> <span class="ident">blocks</span> { |
493 |
| - <span class="ident">apply_conversion</span>(<span class="ident">buf</span>, <span class="ident">ct</span>); |
494 |
| - } |
495 |
| - <span class="ident">blocks</span>.<span class="ident">into_iter</span>().<span class="ident">flatten</span>().<span class="ident">collect</span>() |
| 472 | + <span class="kw">let</span> <span class="ident">blocks</span> <span class="op">=</span> <span class="ident">block</span>(<span class="kw-2">&</span><span class="ident">buf</span>, <span class="kw-2">*</span><span class="ident">cbs</span>, <span class="kw-2">*</span><span class="ident">sync</span>, <span class="ident">rstat</span>); |
| 473 | + <span class="ident">blocks</span> |
| 474 | + .<span class="ident">into_iter</span>() |
| 475 | + .<span class="ident">flat_map</span>(<span class="op">|</span><span class="ident">block</span><span class="op">|</span> <span class="ident">apply_conversion</span>(<span class="ident">block</span>, <span class="ident">ct</span>)) |
| 476 | + .<span class="ident">collect</span>() |
496 | 477 | }
|
497 | 478 | <span class="ident">ConversionMode::ConvertThenBlock</span>(<span class="ident">ct</span>, <span class="ident">cbs</span>, <span class="ident">sync</span>) => {
|
498 |
| - <span class="ident">apply_conversion</span>(<span class="kw-2">&mut</span> <span class="ident">buf</span>, <span class="ident">ct</span>); |
| 479 | + <span class="kw">let</span> <span class="ident">buf</span>: <span class="ident">Vec</span><span class="op"><</span><span class="kw">_</span><span class="op">></span> <span class="op">=</span> <span class="ident">apply_conversion</span>(<span class="ident">buf</span>, <span class="ident">ct</span>).<span class="ident">collect</span>(); |
499 | 480 | <span class="ident">block</span>(<span class="kw-2">&</span><span class="ident">buf</span>, <span class="kw-2">*</span><span class="ident">cbs</span>, <span class="kw-2">*</span><span class="ident">sync</span>, <span class="ident">rstat</span>)
|
500 | 481 | .<span class="ident">into_iter</span>()
|
501 | 482 | .<span class="ident">flatten</span>()
|
|
506 | 487 | .<span class="ident">flatten</span>()
|
507 | 488 | .<span class="ident">collect</span>(),
|
508 | 489 | <span class="ident">ConversionMode::UnblockThenConvert</span>(<span class="ident">ct</span>, <span class="ident">cbs</span>) => {
|
509 |
| - <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">buf</span> <span class="op">=</span> <span class="ident">unblock</span>(<span class="kw-2">&</span><span class="ident">buf</span>, <span class="kw-2">*</span><span class="ident">cbs</span>); |
510 |
| - <span class="ident">apply_conversion</span>(<span class="kw-2">&mut</span> <span class="ident">buf</span>, <span class="ident">ct</span>); |
511 |
| - <span class="ident">buf</span> |
| 490 | + <span class="kw">let</span> <span class="ident">buf</span> <span class="op">=</span> <span class="ident">unblock</span>(<span class="kw-2">&</span><span class="ident">buf</span>, <span class="kw-2">*</span><span class="ident">cbs</span>); |
| 491 | + <span class="ident">apply_conversion</span>(<span class="ident">buf</span>, <span class="ident">ct</span>).<span class="ident">collect</span>() |
512 | 492 | }
|
513 | 493 | <span class="ident">ConversionMode::ConvertThenUnblock</span>(<span class="ident">ct</span>, <span class="ident">cbs</span>) => {
|
514 |
| - <span class="ident">apply_conversion</span>(<span class="kw-2">&mut</span> <span class="ident">buf</span>, <span class="ident">ct</span>); |
| 494 | + <span class="kw">let</span> <span class="ident">buf</span>: <span class="ident">Vec</span><span class="op"><</span><span class="kw">_</span><span class="op">></span> <span class="op">=</span> <span class="ident">apply_conversion</span>(<span class="ident">buf</span>, <span class="ident">ct</span>).<span class="ident">collect</span>(); |
515 | 495 | <span class="ident">unblock</span>(<span class="kw-2">&</span><span class="ident">buf</span>, <span class="kw-2">*</span><span class="ident">cbs</span>)
|
516 | 496 | }
|
517 | 497 | <span class="ident">ConversionMode::UnblockOnly</span>(<span class="ident">cbs</span>) => <span class="ident">unblock</span>(<span class="kw-2">&</span><span class="ident">buf</span>, <span class="kw-2">*</span><span class="ident">cbs</span>),
|
|
0 commit comments