song list: get rid of boost::zip_iterator and improve {Const,}SongIterator

This commit is contained in:
Andrzej Rybczak
2016-12-08 04:28:43 +01:00
parent 612f8c3145
commit b7386c4fa6
15 changed files with 244 additions and 161 deletions

View File

@@ -22,53 +22,34 @@
#include "song_info.h"
#include "utility/functional.h"
namespace {
template <bool Const>
struct SongExtractor
{
typedef SongExtractor type;
typedef typename NC::Menu<MPD::Song>::Item MenuItem;
typedef typename std::conditional<Const, const MenuItem, MenuItem>::type Item;
typedef typename std::conditional<Const, const MPD::Song, MPD::Song>::type Song;
Song *operator()(Item &item) const
{
return &item.value();
}
};
}
SongIterator SongMenu::currentS()
{
return makeSongIterator_<MPD::Song>(current(), SongExtractor<false>());
return makeSongIterator(current());
}
ConstSongIterator SongMenu::currentS() const
{
return makeConstSongIterator_<MPD::Song>(current(), SongExtractor<true>());
return makeConstSongIterator(current());
}
SongIterator SongMenu::beginS()
{
return makeSongIterator_<MPD::Song>(begin(), SongExtractor<false>());
return makeSongIterator(begin());
}
ConstSongIterator SongMenu::beginS() const
{
return makeConstSongIterator_<MPD::Song>(begin(), SongExtractor<true>());
return makeConstSongIterator(begin());
}
SongIterator SongMenu::endS()
{
return makeSongIterator_<MPD::Song>(end(), SongExtractor<false>());
return makeSongIterator(end());
}
ConstSongIterator SongMenu::endS() const
{
return makeConstSongIterator_<MPD::Song>(end(), SongExtractor<true>());
return makeConstSongIterator(end());
}
std::vector<MPD::Song> SongMenu::getSelectedSongs()