Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
ranges.h
1// SPDX-FileCopyrightText: © 2025 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#pragma once
5
6#include <ranges>
7
8namespace zrythm::ranges
9{
10
15template <std::ranges::input_range R, typename Proj = std::identity>
16bool
17all_equal (R &&r, Proj proj = {})
18{
19 auto begin = std::ranges::begin (r);
20 auto end = std::ranges::end (r);
21
22 // Empty or single-element ranges are considered all equal
23 if (begin == end)
24 return true;
25
26 // Returns end() if no non-equal adjacent elements exist
27 return std::ranges::adjacent_find (r, std::ranges::not_equal_to{}, proj) == end;
28}
29}