|
319 | 319 | <a href="#319" id="319">319</a>
|
320 | 320 | <a href="#320" id="320">320</a>
|
321 | 321 | <a href="#321" id="321">321</a>
|
| 322 | +<a href="#322" id="322">322</a> |
322 | 323 | </pre></div><pre class="rust"><code><span class="comment">// * This file is part of the uutils coreutils package.
|
323 | 324 | // *
|
324 | 325 | // * (c) Michael Debertol <michael.debertol..AT..gmail.com>
|
|
337 | 338 | };
|
338 | 339 |
|
339 | 340 | <span class="kw">use </span>memchr::memchr_iter;
|
340 |
| -<span class="kw">use </span>ouroboros::self_referencing; |
| 341 | +<span class="kw">use </span>self_cell::self_cell; |
341 | 342 | <span class="kw">use </span>uucore::error::{UResult, USimpleError};
|
342 | 343 |
|
343 | 344 | <span class="kw">use crate</span>::{numeric_str_cmp::NumInfo, GeneralF64ParseResult, GlobalSettings, Line, SortError};
|
344 | 345 |
|
345 |
| -<span class="doccomment">/// The chunk that is passed around between threads. |
346 |
| -/// `lines` consist of slices into `buffer`. |
347 |
| -</span><span class="attr">#[self_referencing(pub_extras)] |
348 |
| -#[derive(Debug)] |
349 |
| -</span><span class="kw">pub struct </span>Chunk { |
350 |
| - <span class="kw">pub </span>buffer: Vec<u8>, |
351 |
| - <span class="attr">#[borrows(buffer)] |
352 |
| - #[covariant] |
353 |
| - </span><span class="kw">pub </span>contents: ChunkContents<<span class="lifetime">'this</span>>, |
354 |
| -} |
| 346 | +<span class="macro">self_cell!</span>( |
| 347 | + <span class="doccomment">/// The chunk that is passed around between threads. |
| 348 | + </span><span class="kw">pub struct </span>Chunk { |
| 349 | + owner: Vec<u8>, |
| 350 | + |
| 351 | + <span class="attr">#[covariant] |
| 352 | + </span>dependent: ChunkContents, |
| 353 | + } |
| 354 | + |
| 355 | + <span class="kw">impl </span>{Debug} |
| 356 | +); |
355 | 357 |
|
356 | 358 | <span class="attr">#[derive(Debug)]
|
357 | 359 | </span><span class="kw">pub struct </span>ChunkContents<<span class="lifetime">'a</span>> {
|
|
369 | 371 | <span class="kw">impl </span>Chunk {
|
370 | 372 | <span class="doccomment">/// Destroy this chunk and return its components to be reused.
|
371 | 373 | </span><span class="kw">pub fn </span>recycle(<span class="kw-2">mut </span><span class="self">self</span>) -> RecycledChunk {
|
372 |
| - <span class="kw">let </span>recycled_contents = <span class="self">self</span>.with_contents_mut(|contents| { |
| 374 | + <span class="kw">let </span>recycled_contents = <span class="self">self</span>.with_dependent_mut(|<span class="kw">_</span>, contents| { |
373 | 375 | contents.lines.clear();
|
374 | 376 | contents.line_data.selections.clear();
|
375 | 377 | contents.line_data.num_infos.clear();
|
|
402 | 404 | selections: recycled_contents.<span class="number">1</span>,
|
403 | 405 | num_infos: recycled_contents.<span class="number">2</span>,
|
404 | 406 | parsed_floats: recycled_contents.<span class="number">3</span>,
|
405 |
| - buffer: <span class="self">self</span>.into_heads().buffer, |
| 407 | + buffer: <span class="self">self</span>.into_owner(), |
406 | 408 | }
|
407 | 409 | }
|
408 | 410 |
|
409 | 411 | <span class="kw">pub fn </span>lines(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="kw-2">&</span>Vec<Line> {
|
410 |
| - <span class="kw-2">&</span><span class="self">self</span>.borrow_contents().lines |
| 412 | + <span class="kw-2">&</span><span class="self">self</span>.borrow_dependent().lines |
411 | 413 | }
|
412 | 414 | <span class="kw">pub fn </span>line_data(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="kw-2">&</span>LineData {
|
413 |
| - <span class="kw-2">&</span><span class="self">self</span>.borrow_contents().line_data |
| 415 | + <span class="kw-2">&</span><span class="self">self</span>.borrow_dependent().line_data |
414 | 416 | }
|
415 | 417 | }
|
416 | 418 |
|
|
0 commit comments