// Copyright (c) FIRST and other WPILib contributors. // Open Source Software; you can modify and/or share it under the terms of // the WPILib BSD license file in the root directory of this project. #pragma once #include #include #include #include namespace wpi { // Binary insertion into vector; std::log(n) efficiency. template typename std::vector::iterator insert_sorted(std::vector& vec, T const& item) { return vec.insert(std::upper_bound(vec.begin(), vec.end(), item), item); } /** * Calls f(i, elem) for each element of elems where i is the index of the * element in elems and elem is the element. * * @param f The callback. * @param elems The elements. */ template constexpr void for_each(F&& f, Ts&&... elems) { [&](std::index_sequence) { (f(Is, elems), ...); }(std::index_sequence_for{}); } } // namespace wpi