PlasmaActivities

range.h
1/*
2 SPDX-FileCopyrightText: 2012 Ivan Cukic <ivan.cukic(at)kde.org>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5*/
6
7#ifndef UTILS_RANGE_H
8#define UTILS_RANGE_H
9
10#include <boost/range/adaptor/filtered.hpp>
11#include <boost/range/adaptor/transformed.hpp>
12#include <boost/range/algorithm/copy.hpp>
13
14/********************************************************************
15 * Syntactic sugar for converting ranges to collections *
16 ********************************************************************/
17
18namespace kamd
19{
20namespace utils
21{
22template<typename Collection, typename Range>
23__inline Collection as_collection(Range range)
24{
25 Collection result;
26
27 boost::copy(range, std::back_inserter(result));
28
29 return result;
30}
31
32template<typename Member, typename... Args>
33__inline auto transformed(Member member, Args... args) -> decltype(boost::adaptors::transformed(std::bind(member, args..., std::placeholders::_1)))
34{
35 return boost::adaptors::transformed(std::bind(member, args..., std::placeholders::_1));
36}
37
38template<typename Member, typename... Args>
39__inline auto filtered(Member member, Args... args) -> decltype(boost::adaptors::filtered(std::bind(member, args..., std::placeholders::_1)))
40{
41 return boost::adaptors::filtered(std::bind(member, args..., std::placeholders::_1));
42}
43
44template<typename Class, typename Member>
45__inline auto filtered(Class *const self, Member member) -> decltype(boost::adaptors::filtered(std::bind(member, self, std::placeholders::_1)))
46{
47 return boost::adaptors::filtered(std::bind(member, self, std::placeholders::_1));
48}
49
50} // namespace utils
51} // namespace kamd
52
53#endif // UTILS_RANGE_H
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Feb 28 2025 12:01:06 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.