/// \file
// Range v3 library
//
// Copyright Andrey Diduh 2019
//
// Use, modification and distribution is subject to the
// Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// Project home: https://github.com/ericniebler/range-v3
//
#ifndef RANGES_V3_ACTION_REMOVE_HPP
#define RANGES_V3_ACTION_REMOVE_HPP
#include
#include
#include
#include
#include
#include
#include
#include
#include
namespace ranges
{
/// \addtogroup group-actions
/// @{
namespace actions
{
struct remove_fn
{
private:
friend action_access;
template
static auto CPP_fun(bind)(remove_fn remove, V && value, P proj)( //
requires(!range))
{
return bind_back(remove, static_cast(value), std::move(proj));
}
template
static auto bind(remove_fn remove, V && value)
{
return bind_back(remove, static_cast(value), identity{});
}
public:
template
auto operator()(Rng && rng, V const & value, P proj = {}) const
-> CPP_ret(Rng)( //
requires forward_range && permutable> &&
erasable_range, sentinel_t> &&
indirect_relation, P>,
V const *>)
{
auto it = ranges::remove(rng, value, std::move(proj));
ranges::erase(rng, it, ranges::end(rng));
return static_cast(rng);
}
};
/// \ingroup group-actions
/// \sa action
/// \sa with_braced_init_args
RANGES_INLINE_VARIABLE(action, remove)
} // namespace actions
/// @}
} // namespace ranges
#endif // include guard