/* * Copyright 2013 (c) Anna Schumaker. */ #include #include Playqueue :: Playqueue() : flags(0), cur(-1) { } Playqueue :: Playqueue(playqueue_flags f) : flags(f), cur(-1) { } Playqueue :: ~Playqueue() { } void Playqueue :: write(File &f) { f << flags << " " << tracks.size(); for (unsigned int i = 0; i < tracks.size(); i++) f << " " << tracks[i]; } void Playqueue :: read(File &f) { unsigned int n; f >> flags >> n; tracks.resize(n); for (unsigned int i = 0; i < n; i++) f >> tracks[i]; } void Playqueue :: set_flag(playqueue_flags f) { flags |= f; } void Playqueue :: unset_flag(playqueue_flags f) { flags &= ~f; } const unsigned int Playqueue :: get_flags() { return flags; } unsigned int Playqueue :: add(unsigned int track_id) { tracks.push_back(track_id); return tracks.size() - 1; } void Playqueue :: del(unsigned int plist_id) { tracks.erase(tracks.begin() + plist_id); } unsigned int Playqueue :: size() { return tracks.size(); } unsigned int Playqueue :: next() { unsigned int res; if (tracks.size() == 1) cur = 0; else if (flags & PQ_RANDOM) cur += rand() % (tracks.size() / 2) + 1; else cur++; if (cur >= tracks.size()) cur -= tracks.size(); res = tracks[cur]; if (!(flags & PQ_REPEAT)) { tracks.erase(tracks.begin() + cur); cur--; } return res; }