functional: remove reverse_iteration, use boost::range instead

This commit is contained in:
Andrzej Rybczak
2016-12-14 08:01:31 +01:00
parent 2e0de374a3
commit 30830e338a
3 changed files with 7 additions and 50 deletions

View File

@@ -19,6 +19,7 @@
***************************************************************************/
#include <algorithm>
#include <boost/range/adaptor/reversed.hpp>
#include <time.h>
#include "enums.h"
@@ -66,7 +67,7 @@ MPD::SongIterator getDatabaseIterator(MPD::Connection &mpd)
void removeSongFromPlaylist(const SongMenu &playlist, const MPD::Song &s)
{
Mpd.StartCommandsList();
for (auto &item : reverse_iteration(playlist))
for (auto &item : boost::adaptors::reverse(playlist))
if (item.value() == s)
Mpd.Delete(item.value().getPosition());
Mpd.CommitCommandsList();

View File

@@ -251,7 +251,7 @@ struct Menu: Window, List
typedef typename std::vector<Item>::const_iterator ConstIterator;
typedef std::reverse_iterator<Iterator> ReverseIterator;
typedef std::reverse_iterator<ConstIterator> ConstReverseIterator;
typedef boost::transform_iterator<
typename Item::template ExtractValue<Const::No>,
Iterator> ValueIterator;
@@ -268,6 +268,10 @@ struct Menu: Window, List
typename Item::template ExtractProperties<Const::Yes>,
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.
/// If not set by setItemDisplayer(), menu won't display anything.
/// @see setItemDisplayer()

View File

@@ -24,43 +24,6 @@
#include <boost/locale/encoding_utf.hpp>
#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.
template <typename InputIterator, typename PredicateT, typename MapT>
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);
}
// 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
template <typename TargetT, typename SourceT>
struct convertString