| 120 | |
| 121 | impl MultiStreamTrimCursor { |
| 122 | fn new(input: &MultiStream) -> Option<Self> { |
| 123 | let streams = input.streams.keys().cloned().collect::<Vec<_>>(); |
| 124 | let stream_addr = streams.first()?; |
| 125 | |
| 126 | let stream_len = input.streams[stream_addr].bytes.len(); |
| 127 | let remove_len = usize::max(stream_len.next_power_of_two() / 2, TRIM_MIN_BYTES); |
| 128 | let remove_offset = 0; |
| 129 | |
| 130 | Some(Self { |
| 131 | streams, |
| 132 | current_stream: 0, |
| 133 | remove_offset, |
| 134 | remove_len, |
| 135 | attempts: MAX_FAILED_ATTEMPTS_FOR_STREAM, |
| 136 | }) |
| 137 | } |
| 138 | |
| 139 | fn randomize_trim_order<R: Rng>(&mut self, rng: &mut R) { |
| 140 | self.streams.shuffle(rng) |