ocarina/lib/playqueue.cpp

89 lines
1.3 KiB
C++
Raw Normal View History

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