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 <kactivities-features.h> 0010 0011 /******************************************************************** 0012 * Associative container's for_each (for hash, map, and similar ) * 0013 ********************************************************************/ 0014 0015 namespace kamd 0016 { 0017 namespace utils 0018 { 0019 namespace details 0020 { //_ 0021 0022 // Iterator Functions 0023 0024 template<typename Iterator, typename Function> 0025 Function qt_for_each_assoc(Iterator start, Iterator end, Function f) 0026 { 0027 for (; start != end; ++start) 0028 f(start.key(), start.value()); 0029 0030 return f; 0031 } 0032 0033 template<typename Iterator, typename Function> 0034 Function stl_for_each_assoc(Iterator start, Iterator end, Function f) 0035 { 0036 for (; start != end; ++start) 0037 f(start->first, start->second); 0038 0039 return f; 0040 } 0041 0042 // Container functions 0043 0044 template<typename Container, typename Function> 0045 Function _for_each_assoc_helper_container(const Container &c, Function f, decltype(&Container::constBegin) *) 0046 { 0047 // STL will never have methods with camelCase :) 0048 return qt_for_each_assoc(c.constBegin(), c.constEnd(), f); 0049 } 0050 0051 template<typename Container, typename Function, typename Default> 0052 Function _for_each_assoc_helper_container(const Container &c, Function f, Default *) 0053 { 0054 return stl_for_each_assoc(c.cbegin(), c.cend(), f); 0055 } 0056 0057 } //^ namespace details 0058 0059 template<typename Container, typename Function> 0060 Function for_each_assoc(const Container &c, Function f) 0061 { 0062 return details::_for_each_assoc_helper_container<Container, Function>(c, f, nullptr); 0063 } 0064 0065 } // namespace utils 0066 } // namespace kamd