1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(transparent)]
pub struct IntoList<'a, BSA: BitSetAware>(pub &'a BitSet<BSA>);
impl<'a, BSA: BitSetAware> IntoLineFeedTerminatedByteString<'a> for IntoList<'a, BSA>
{
#[inline(always)]
fn into_line_feed_terminated_byte_string(self) -> Cow<'a, [u8]>
{
let mut string = String::with_capacity(4096);
let mut written_first = false;
let mut start_of_range_and_last_contiguous_value_in_range: Option<(u16, u16)> = None;
for bit in self.0.iterate()
{
let current: u16 = bit.into();
match start_of_range_and_last_contiguous_value_in_range
{
None =>
{
start_of_range_and_last_contiguous_value_in_range = Some((current, current));
}
Some((start_of_range, last_contiguous_value_in_range)) =>
{
if current - 1 == last_contiguous_value_in_range
{
start_of_range_and_last_contiguous_value_in_range = Some((start_of_range, current));
continue
}
if written_first
{
string.push(',')
}
else
{
written_first = true
}
if start_of_range == last_contiguous_value_in_range
{
string.push_str(&format!("{}", start_of_range));
}
else
{
string.push_str(&format!("{}-{}", start_of_range, last_contiguous_value_in_range));
}
start_of_range_and_last_contiguous_value_in_range = Some((current, current));
}
}
}
if let Some((start_of_range, last_contiguous_value_in_range)) = start_of_range_and_last_contiguous_value_in_range
{
if written_first
{
string.push(',')
}
if start_of_range == last_contiguous_value_in_range
{
string.push_str(&format!("{}", start_of_range));
}
else
{
string.push_str(&format!("{}-{}", start_of_range, last_contiguous_value_in_range));
}
}
string.push('\n');
Cow::from(string.into_bytes())
}
}