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