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