#include "MidiLock.h" #include "MidiSong.h" #include "MidiTrack.h" #include MidiSong::MidiSong() : lock(std::make_shared()) { ++_mdb; } MidiSong::~MidiSong() { --_mdb; } int MidiSong::getHighestTrackNumber() const { int numTracks = int(tracks.size()); return numTracks - 1; } void MidiSong::addTrack(int index, std::shared_ptr track) { if (index >= (int) tracks.size()) { tracks.resize(index + 1); } assert(!tracks[index]); // can only create at empty loc tracks[index] = track; } void MidiSong::createTrack(int index) { assert(lock); addTrack(index, std::make_shared(lock)); } MidiTrackPtr MidiSong::getTrack(int index) { assert(index < (int) tracks.size()); assert(index >= 0); assert(tracks[index]); return tracks[index]; } MidiTrackConstPtr MidiSong::getTrackConst(int index) const { assert(index < (int) tracks.size()); assert(index >= 0); assert(tracks[index]); return tracks[index]; } MidiSongPtr MidiSong::makeTest(MidiTrack::TestContent content, int trackNumber) { MidiSongPtr song = std::make_shared(); MidiLocker l(song->lock); auto track = MidiTrack::makeTest(content, song->lock); song->addTrack(trackNumber, track); song->assertValid(); return song; } #if 0 MidiSongPtr MidiSong::makeTest1() { MidiSongPtr song = std::make_shared(); auto track = MidiTrack::makeTest1(); song->addTrack(0, track); song->assertValid(); return song; } MidiSongPtr MidiSong::makeTestEmpty() { MidiSongPtr song = std::make_shared(); auto track = MidiTrack::makeTestEmpty(); song->addTrack(0, track); song->assertValid(); return song; } #endif void MidiSong::assertValid() const { for (auto track : tracks) { if (track) { track->assertValid(); } } }