/* * SPDX-FileCopyrightText: 2012-2016 Ivan Cukic * * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL */ #pragma once #include /******************************************************************** * Associative container's for_each (for hash, map, and similar ) * ********************************************************************/ namespace kamd { namespace utils { namespace details { //_ // Iterator Functions template Function qt_for_each_assoc(Iterator start, Iterator end, Function f) { for (; start != end; ++start) f(start.key(), start.value()); return f; } template Function stl_for_each_assoc(Iterator start, Iterator end, Function f) { for (; start != end; ++start) f(start->first, start->second); return f; } // Container functions template Function _for_each_assoc_helper_container(const Container &c, Function f, decltype(&Container::constBegin) *) { // STL will never have methods with camelCase :) return qt_for_each_assoc(c.constBegin(), c.constEnd(), f); } template Function _for_each_assoc_helper_container(const Container &c, Function f, Default *) { return stl_for_each_assoc(c.cbegin(), c.cend(), f); } } //^ namespace details template Function for_each_assoc(const Container &c, Function f) { return details::_for_each_assoc_helper_container(c, f, nullptr); } } // namespace utils } // namespace kamd