File indexing completed on 2024-05-19 05:29:33
0001 /* 0002 * SPDX-FileCopyrightText: 2012-2016 Ivan Cukic <ivan.cukic@kde.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #pragma once 0008 0009 #include <boost/range/adaptor/filtered.hpp> 0010 #include <boost/range/adaptor/transformed.hpp> 0011 #include <boost/range/algorithm/copy.hpp> 0012 0013 /******************************************************************** 0014 * Syntactic sugar for converting ranges to collections * 0015 ********************************************************************/ 0016 0017 namespace kamd 0018 { 0019 namespace utils 0020 { 0021 template<typename Collection, typename Range> 0022 __inline Collection as_collection(Range range) 0023 { 0024 Collection result; 0025 0026 boost::copy(range, std::back_inserter(result)); 0027 0028 return result; 0029 } 0030 0031 template<typename Member, typename... Args> 0032 __inline auto transformed(Member member, Args... args) -> decltype(boost::adaptors::transformed(std::bind(member, args..., std::placeholders::_1))) 0033 { 0034 return boost::adaptors::transformed(std::bind(member, args..., std::placeholders::_1)); 0035 } 0036 0037 template<typename Member, typename... Args> 0038 __inline auto filtered(Member member, Args... args) -> decltype(boost::adaptors::filtered(std::bind(member, args..., std::placeholders::_1))) 0039 { 0040 return boost::adaptors::filtered(std::bind(member, args..., std::placeholders::_1)); 0041 } 0042 0043 template<typename Class, typename Member> 0044 __inline auto filtered(Class *const self, Member member) -> decltype(boost::adaptors::filtered(std::bind(member, self, std::placeholders::_1))) 0045 { 0046 return boost::adaptors::filtered(std::bind(member, self, std::placeholders::_1)); 0047 } 0048 0049 } // namespace utils 0050 } // namespace kamd