@@ -31,5 +31,63 @@ ScoreNative<T> to_native(const Score<T>& score);
31
31
template <TType T>
32
32
TrackNative<T> to_native (const Track<T>& track);
33
33
34
+ /*
35
+ * Conversion between shared and native
36
+ */
37
+
38
+ template <TType T>
39
+ Track<T> to_shared (TrackNative<T>&& track) {
40
+ Track<T> new_track{std::move (track.name ), track.program , track.is_drum };
41
+ new_track.notes = details::to_shared_vec (std::move (track.notes ));
42
+ new_track.controls = details::to_shared_vec (std::move (track.controls ));
43
+ new_track.pitch_bends = details::to_shared_vec (std::move (track.pitch_bends ));
44
+ new_track.pedals = details::to_shared_vec (std::move (track.pedals ));
45
+ return new_track;
46
+ }
47
+
48
+ template <TType T>
49
+ Score<T> to_shared (ScoreNative<T>&& score) {
50
+ Score<T> new_score{score.ticks_per_quarter };
51
+ new_score.time_signatures = details::to_shared_vec (std::move (score.time_signatures ));
52
+ new_score.key_signatures = details::to_shared_vec (std::move (score.key_signatures ));
53
+ new_score.tempos = details::to_shared_vec (std::move (score.tempos ));
54
+ new_score.lyrics = details::to_shared_vec (std::move (score.lyrics ));
55
+ new_score.markers = details::to_shared_vec (std::move (score.markers ));
56
+ new_score.tracks ->reserve (score.tracks .size ());
57
+ for (auto & track : score.tracks ) {
58
+ shared<Track<T>> new_track = std::make_shared<Track<T>>(std::move (to_shared (std::move (track))));
59
+ new_score.tracks ->push_back (std::move (new_track));
60
+ }
61
+ return new_score;
62
+ }
63
+
64
+ template <TType T>
65
+ TrackNative<T> to_native (const Track<T>& track) {
66
+ TrackNative<T> new_track{track.name , track.program , track.is_drum };
67
+ new_track.notes = details::to_native_vec (track.notes );
68
+ new_track.controls = details::to_native_vec (track.controls );
69
+ new_track.pitch_bends = details::to_native_vec (track.pitch_bends );
70
+ new_track.pedals = details::to_native_vec (track.pedals );
71
+ return new_track;
72
+ }
73
+
74
+ template <TType T>
75
+ ScoreNative<T> to_native (const Score<T>& score) {
76
+ ScoreNative<T> new_score{score.ticks_per_quarter };
77
+ new_score.time_signatures = details::to_native_vec (score.time_signatures );
78
+ new_score.key_signatures = details::to_native_vec (score.key_signatures );
79
+ new_score.tempos = details::to_native_vec (score.tempos );
80
+ new_score.lyrics = details::to_native_vec (score.lyrics );
81
+ new_score.markers = details::to_native_vec (score.markers );
82
+ new_score.tracks .reserve (score.tracks ->size ());
83
+ for (const shared<Track<T>>& track : *score.tracks ) {
84
+ new_score.tracks .push_back (std::move (to_native (*track)));
85
+ }
86
+ return new_score;
87
+ }
88
+
34
89
} // namespace symusic
90
+
91
+
92
+
35
93
#endif // LIBSYMUSIC_CONVERSION_H
0 commit comments