functional: remove reverse_iteration, use boost::range instead
This commit is contained in:
@@ -19,6 +19,7 @@
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <boost/range/adaptor/reversed.hpp>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
#include "enums.h"
|
#include "enums.h"
|
||||||
@@ -66,7 +67,7 @@ MPD::SongIterator getDatabaseIterator(MPD::Connection &mpd)
|
|||||||
void removeSongFromPlaylist(const SongMenu &playlist, const MPD::Song &s)
|
void removeSongFromPlaylist(const SongMenu &playlist, const MPD::Song &s)
|
||||||
{
|
{
|
||||||
Mpd.StartCommandsList();
|
Mpd.StartCommandsList();
|
||||||
for (auto &item : reverse_iteration(playlist))
|
for (auto &item : boost::adaptors::reverse(playlist))
|
||||||
if (item.value() == s)
|
if (item.value() == s)
|
||||||
Mpd.Delete(item.value().getPosition());
|
Mpd.Delete(item.value().getPosition());
|
||||||
Mpd.CommitCommandsList();
|
Mpd.CommitCommandsList();
|
||||||
|
|||||||
@@ -251,7 +251,7 @@ struct Menu: Window, List
|
|||||||
typedef typename std::vector<Item>::const_iterator ConstIterator;
|
typedef typename std::vector<Item>::const_iterator ConstIterator;
|
||||||
typedef std::reverse_iterator<Iterator> ReverseIterator;
|
typedef std::reverse_iterator<Iterator> ReverseIterator;
|
||||||
typedef std::reverse_iterator<ConstIterator> ConstReverseIterator;
|
typedef std::reverse_iterator<ConstIterator> ConstReverseIterator;
|
||||||
|
|
||||||
typedef boost::transform_iterator<
|
typedef boost::transform_iterator<
|
||||||
typename Item::template ExtractValue<Const::No>,
|
typename Item::template ExtractValue<Const::No>,
|
||||||
Iterator> ValueIterator;
|
Iterator> ValueIterator;
|
||||||
@@ -268,6 +268,10 @@ struct Menu: Window, List
|
|||||||
typename Item::template ExtractProperties<Const::Yes>,
|
typename Item::template ExtractProperties<Const::Yes>,
|
||||||
ConstIterator> ConstPropertiesIterator;
|
ConstIterator> ConstPropertiesIterator;
|
||||||
|
|
||||||
|
// For compliance with boost utilities.
|
||||||
|
typedef Iterator iterator;
|
||||||
|
typedef ConstIterator const_iterator;
|
||||||
|
|
||||||
/// Function helper prototype used to display each option on the screen.
|
/// Function helper prototype used to display each option on the screen.
|
||||||
/// If not set by setItemDisplayer(), menu won't display anything.
|
/// If not set by setItemDisplayer(), menu won't display anything.
|
||||||
/// @see setItemDisplayer()
|
/// @see setItemDisplayer()
|
||||||
|
|||||||
@@ -24,43 +24,6 @@
|
|||||||
#include <boost/locale/encoding_utf.hpp>
|
#include <boost/locale/encoding_utf.hpp>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
template <typename BaseT>
|
|
||||||
struct reversed_iteration
|
|
||||||
{
|
|
||||||
reversed_iteration(BaseT &base_)
|
|
||||||
: base(base_) { }
|
|
||||||
|
|
||||||
BaseT &base;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename BaseT>
|
|
||||||
reversed_iteration<BaseT> reverse_iteration(BaseT &base_) {
|
|
||||||
return reversed_iteration<BaseT>(base_);
|
|
||||||
}
|
|
||||||
template <typename BaseT>
|
|
||||||
auto begin(reversed_iteration<BaseT> &rev) -> decltype(rev.base.rbegin()) {
|
|
||||||
return rev.base.rbegin();
|
|
||||||
}
|
|
||||||
template <typename BaseT>
|
|
||||||
auto begin(reversed_iteration<const BaseT> &rev) -> decltype(rev.base.rbegin()) {
|
|
||||||
return rev.base.rbegin();
|
|
||||||
}
|
|
||||||
template <typename BaseT>
|
|
||||||
auto end(reversed_iteration<BaseT> &rev) -> decltype(rev.base.rend()) {
|
|
||||||
return rev.base.rend();
|
|
||||||
}
|
|
||||||
template <typename BaseT>
|
|
||||||
auto end(reversed_iteration<const BaseT> &rev) -> decltype(rev.base.rend()) {
|
|
||||||
return rev.base.rend();
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename ValueT>
|
|
||||||
struct pointer_extractor
|
|
||||||
{
|
|
||||||
typedef pointer_extractor type;
|
|
||||||
ValueT *operator()(ValueT &v) const { return &v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Map over the first element in range satisfying the predicate.
|
/// Map over the first element in range satisfying the predicate.
|
||||||
template <typename InputIterator, typename PredicateT, typename MapT>
|
template <typename InputIterator, typename PredicateT, typename MapT>
|
||||||
InputIterator find_map_first(InputIterator first, InputIterator last, PredicateT &&p, MapT &&f)
|
InputIterator find_map_first(InputIterator first, InputIterator last, PredicateT &&p, MapT &&f)
|
||||||
@@ -81,17 +44,6 @@ void find_map_all(InputIterator first, InputIterator last, PredicateT &&p, MapT
|
|||||||
while (it != last);
|
while (it != last);
|
||||||
}
|
}
|
||||||
|
|
||||||
// identity function object
|
|
||||||
struct id_
|
|
||||||
{
|
|
||||||
template <typename ValueT>
|
|
||||||
constexpr auto operator()(ValueT &&v) const noexcept
|
|
||||||
-> decltype(std::forward<ValueT>(v))
|
|
||||||
{
|
|
||||||
return std::forward<ValueT>(v);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// convert string to appropriate type
|
// convert string to appropriate type
|
||||||
template <typename TargetT, typename SourceT>
|
template <typename TargetT, typename SourceT>
|
||||||
struct convertString
|
struct convertString
|
||||||
|
|||||||
Reference in New Issue
Block a user