ocarina/lib/playqueue.cpp

89 lines
1.3 KiB
C++
Raw Normal View History

/*
* Copyright 2013 (c) Anna Schumaker.
*/
#include <playlist.h>
#include <stdlib.h>
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;
}