| 46 | }; |
| 47 | |
| 48 | void ClonePatterns(const CFrameSelection &Sel, CSongView &view) { // // // |
| 49 | std::unordered_map<std::pair<int, int>, int, pairhash> NewPatterns; |
| 50 | |
| 51 | CSongData &song = view.GetSong(); |
| 52 | |
| 53 | for (auto [b, e] = CFrameIterator::FromSelection(Sel, view); b != e; ++b) { |
| 54 | for (int c = b.m_iChannel; c < e.m_iChannel; ++c) { |
| 55 | int OldPattern = b.Get(c); |
| 56 | auto Index = std::make_pair(c, OldPattern); |
| 57 | stChannelID ch = view.GetChannelOrder().TranslateChannel(c); |
| 58 | if (auto p = NewPatterns.find(Index); p == NewPatterns.end()) { // // // share common patterns |
| 59 | NewPatterns[Index] = song.GetFreePatternIndex(ch); |
| 60 | song.GetPattern(ch, NewPatterns[Index]) = song.GetPattern(ch, OldPattern); |
| 61 | } |
| 62 | b.Set(c, NewPatterns[Index]); |
| 63 | } |
| 64 | } |
| 65 | } |
| 66 | |
| 67 | } // namespace |
| 68 |
no test coverage detected