pub fn to_vec<T, I: Iterator<Item = T> + Sized>(iter: I) -> Vec<T>
Expand description
Converts an iterator into a vector.
Useful when you to cache the result of an iterator for future use.
Unwraps all results from the iterator items.
Examples found in repository?
examples/benchmark.rs (line 42)
33fn main() {
34 let filename = "D:/Midis/Ra Ra Rasputin Ultimate Black MIDI Final.mid";
35 let repeats = 4;
36
37 println!("Opening midi...");
38 let file = MIDIFile::open(filename, None).unwrap();
39
40 println!("Tracks: {}", file.track_count());
41
42 let loaded_tracks = to_vec(file.iter_all_tracks().map(|t| to_vec_result(t).unwrap()));
43
44 let mut nc: u64 = 0;
45 for track in loaded_tracks.iter() {
46 for e in track {
47 if let Event::NoteOn(_) = **e {
48 nc += 1
49 }
50 }
51 }
52 println!("Note count: {nc}");
53
54 do_run("Parse all tracks individually", repeats, || {
55 for track in file.iter_all_tracks() {
56 for _ in pipe!(track) {}
57 }
58 });
59 do_run("Merge all tracks together while parsing", repeats, || {
60 let merged = pipe!(file.iter_all_tracks()|>to_vec()|>merge_events_array());
61 for _ in merged {}
62 });
63 do_run("Clone all events", repeats, || {
64 let iters = pipe!(loaded_tracks.iter().map(|t| pipe!(t.iter().cloned())));
65 for track in iters {
66 for _ in track {}
67 }
68 });
69 do_run(
70 "Clone all events, then wrap and unwrap them in Result",
71 repeats,
72 || {
73 let iters = pipe!(loaded_tracks
74 .iter()
75 .map(|t| pipe!(t.iter().cloned()|>wrap_ok()|>unwrap_items())));
76 for track in iters {
77 for _ in track {}
78 }
79 },
80 );
81 do_run("Merge all tracks together while cloning", repeats, || {
82 let iters =
83 pipe!(loaded_tracks.iter().map(|t| pipe!(t.iter().cloned()|>wrap_ok()))|>to_vec());
84 let merged = pipe!(iters|>merge_events_array());
85 for _ in merged {}
86 });
87 do_run("Write each track while cloning", repeats, || {
88 let output = Cursor::new(Vec::<u8>::new());
89 let writer = MIDIWriter::new_from_stram(Box::new(output), file.ppq()).unwrap();
90
91 let iters = pipe!(loaded_tracks.iter().map(|t| pipe!(t.iter().cloned())));
92 for track in iters {
93 let mut track_writer = writer.open_next_track();
94 for e in track {
95 track_writer.write_event(e).unwrap();
96 }
97 }
98 });
99 do_run("Merge each track while cloning then write", repeats, || {
100 let output = Cursor::new(Vec::<u8>::new());
101 let writer = MIDIWriter::new_from_stram(Box::new(output), file.ppq()).unwrap();
102
103 let iters =
104 pipe!(loaded_tracks.iter().map(|t| pipe!(t.iter().cloned()|>wrap_ok()))|>to_vec());
105 let merged = pipe!(iters|>merge_events_array()|>unwrap_items());
106 let mut track_writer = writer.open_next_track();
107 for e in merged {
108 track_writer.write_event(e).unwrap();
109 }
110 });
111}