playlist: Implement playlist modification functions

I can now add and remove tracks, in addition to asking for the playlist
size.

Signed-off-by: Anna Schumaker <schumaker.anna@gmail.com>
This commit is contained in:
Anna Schumaker 2013-12-22 17:53:58 -05:00 committed by Anna Schumaker
parent 2d13b74c12
commit 3a478ddba7
5 changed files with 79 additions and 11 deletions

View File

@ -25,16 +25,16 @@ Playlist: (lib/playlist.cpp)
unsigned int flags;
public:
Playlist(flags);
unsigned int add(track_id);
void del(playlist_id);
unsigned int size();
void write(File &);
void read(File &);
void set_flag(playlist_flags);
void unset_flag(playlist_flags);
const unsigned int get_flags();
void write(File &);
void read(File &);
unsigned int add(track_id);
void del(playlist_id);
unsigned int size();
void sort();
unsigned int next();

View File

@ -4,6 +4,8 @@
#ifndef OCARINA_PLAYLIST_H
#define OCARINA_PLAYLIST_H
#include <vector>
enum playlist_flags {
PL_ENABLED = (1 << 0),
PL_RANDOM = (1 << 1),
@ -12,6 +14,7 @@ enum playlist_flags {
class Playlist {
private:
std :: vector <unsigned int> tracks;
unsigned int flags;
public:
@ -21,6 +24,10 @@ public:
void set_flag(playlist_flags);
void unset_flag(playlist_flags);
const unsigned int get_flags();
unsigned int add(unsigned int);
void del(unsigned int);
unsigned int size();
};
#endif /* OCARINA_PLAYLIST_H */

View File

@ -27,3 +27,19 @@ 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();
}

View File

@ -8,13 +8,45 @@
void test_flags(const std :: string &test, Playlist &plist, unsigned int expected)
{
print("%s: ", test.c_str());
print("Test %s: ", test.c_str());
if (plist.get_flags() == expected)
print("SUCCESS\n");
else
print("FAILED\n");
}
void test_add_tracks(const std :: string & test, Playlist &plist,
unsigned int start, unsigned int end)
{
bool passed = true;
print("Test %s: ", test.c_str());
for (unsigned int i = start; i <= end; i++) {
if (plist.add(i) != (i - start))
passed = false;
}
if (passed == true)
print("SUCCESS\n");
else
print("FAILED\n");
}
void test_rm_tracks(const std :: string & test, Playlist & plist, unsigned int n)
{
unsigned int size = plist.size();
unsigned int expected = size - n;
print("Test %s: ", test.c_str());
for (unsigned int i = 0; i < n; i++)
plist.del(i);
if (plist.size() == expected)
print("SUCCESS\n");
else
print("FAILED\n");
}
/* Test flag setting / unsetting / getting */
void test_0()
{
@ -32,8 +64,18 @@ void test_0()
print("\n");
}
/* Test adding / deleting / size queries */
void test_1()
{
Playlist plist(PL_ENABLED);
test_add_tracks("1a", plist, 10, 49);
print("Test 1b: Plist size: %u\n", plist.size());
test_rm_tracks("1c", plist, 10);
}
int main(int argc, char **argv)
{
test_0();
test_1();
return 0;
}

View File

@ -1,6 +1,9 @@
0a: SUCCESS
0b: SUCCESS
0c: SUCCESS
0d: SUCCESS
0f: SUCCESS
Test 0a: SUCCESS
Test 0b: SUCCESS
Test 0c: SUCCESS
Test 0d: SUCCESS
Test 0f: SUCCESS
Test 1a: SUCCESS
Test 1b: Plist size: 40
Test 1c: SUCCESS