deck: Implement next()

I make sure to remove empty playlists from the deck and throw an error
if there are no playable tracks on the deck.

Signed-off-by: Anna Schumaker <schumaker.anna@gmail.com>
This commit is contained in:
Anna Schumaker 2013-12-23 10:22:37 -05:00 committed by Anna Schumaker
parent fecc10ab5e
commit 83a8b5ae1d
5 changed files with 102 additions and 0 deletions

View File

@ -47,6 +47,8 @@ Deck: (lib/deck.cpp)
If the playlist is empty after calling next(), remove it from
the deck.
If there are no playable IDs, throw -1.
void deck :: reset();
This function only exists if CONFIG_DEBUG is enabled. Erase
all the playlist information and reset the deck list.

View File

@ -13,6 +13,7 @@ namespace deck
void remove(unsigned int);
Playlist *get(unsigned int);
void move(unsigned int, unsigned int);
unsigned int next();
#ifdef CONFIG_DEBUG
void print_info();

View File

@ -48,6 +48,23 @@ void deck :: move(unsigned int old_pos, unsigned int new_pos)
playlist_deck.splice(it_new, playlist_deck, it_old);
}
unsigned int deck :: next()
{
unsigned int id = 0;
std::list<Playlist>::iterator it;
for (it = playlist_deck.begin(); it != playlist_deck.end(); it++) {
if (it->get_flags() & PL_ENABLED) {
id = it->next();
if (it->size() == 0)
playlist_deck.erase(it);
return id;
}
}
throw -1;
}
#ifdef CONFIG_DEBUG
void deck :: print_info()
{

View File

@ -68,11 +68,35 @@ void test_3()
print("\n");
}
/* Test the next() function for playlists */
void test_4()
{
print("Test 4:\n");
deck :: get(0)->unset_flag(PL_ENABLED);
deck :: get(1)->unset_flag(PL_ENABLED);
deck :: get(4)->unset_flag(PL_ENABLED);
for (unsigned int i = 0; i < 37; i++) {
try {
print("Playing id: %u\n", deck :: next());
if (i == 11 || i == 25)
deck :: print_info();
} catch (int error) {
print("No playable tracks!\n");
break;
}
}
deck :: print_info();
}
int main(int argc, char **argv)
{
test_0();
test_1();
test_2();
test_3();
test_4();
return 0;
}

View File

@ -55,3 +55,61 @@ deck[2] = Playlist { size = 12, flags = 1 }
deck[3] = Playlist { size = 14, flags = 1 }
deck[4] = Playlist { size = 15, flags = 1 }
deck[5] = Playlist { size = 10, flags = 1 }
deck[0] = Playlist { size = 16, flags = 1 }
deck[1] = Playlist { size = 19, flags = 1 }
deck[2] = Playlist { size = 12, flags = 1 }
deck[3] = Playlist { size = 14, flags = 1 }
deck[4] = Playlist { size = 15, flags = 1 }
deck[5] = Playlist { size = 10, flags = 1 }
Test 4:
Playing id: 0
Playing id: 1
Playing id: 2
Playing id: 3
Playing id: 4
Playing id: 5
Playing id: 6
Playing id: 7
Playing id: 8
Playing id: 9
Playing id: 10
Playing id: 11
deck[0] = Playlist { size = 16, flags = 0 }
deck[1] = Playlist { size = 19, flags = 0 }
deck[2] = Playlist { size = 14, flags = 1 }
deck[3] = Playlist { size = 15, flags = 0 }
deck[4] = Playlist { size = 10, flags = 1 }
Playing id: 0
Playing id: 1
Playing id: 2
Playing id: 3
Playing id: 4
Playing id: 5
Playing id: 6
Playing id: 7
Playing id: 8
Playing id: 9
Playing id: 10
Playing id: 11
Playing id: 12
Playing id: 13
deck[0] = Playlist { size = 16, flags = 0 }
deck[1] = Playlist { size = 19, flags = 0 }
deck[2] = Playlist { size = 15, flags = 0 }
deck[3] = Playlist { size = 10, flags = 1 }
Playing id: 0
Playing id: 1
Playing id: 2
Playing id: 3
Playing id: 4
Playing id: 5
Playing id: 6
Playing id: 7
Playing id: 8
Playing id: 9
No playable tracks!
deck[0] = Playlist { size = 16, flags = 0 }
deck[1] = Playlist { size = 19, flags = 0 }
deck[2] = Playlist { size = 15, flags = 0 }