Files
scylladb/utils/collection-concepts.hh
Kefu Chai 7215d4bfe9 utils: do not include unused headers
these unused includes were identifier by clang-include-cleaner. after
auditing these source files, all of the reports have been confirmed.

please note, because quite a few source files relied on
`utils/to_string.hh` to pull in the specialization of
`fmt::formatter<std::optional<T>>`, after removing
`#include <fmt/std.h>` from `utils/to_string.hh`, we have to
include `fmt/std.h` directly.

Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>
2025-01-14 07:56:39 -05:00

35 lines
1.0 KiB
C++

/*
* Copyright (C) 2020-present ScyllaDB
*/
/*
* SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
*/
#pragma once
#include <type_traits>
#include <compare>
template <typename Func, typename T>
concept Disposer = requires (Func f, T* val) {
{ f(val) } noexcept -> std::same_as<void>;
};
template <typename Key1, typename Key2, typename Less>
concept LessComparable = requires (const Key1& a, const Key2& b, Less less) {
{ less(a, b) } -> std::same_as<bool>;
{ less(b, a) } -> std::same_as<bool>;
};
template <typename Key1, typename Key2, typename Less>
concept LessNothrowComparable = LessComparable<Key1, Key2, Less> && std::is_nothrow_invocable_v<Less, Key1, Key2>;
template <typename T1, typename T2, typename Compare>
concept Comparable = requires (const T1& a, const T2& b, Compare cmp) {
// The Comparable is trichotomic comparator that should return
// negative value when a < b
// zero when a == b
// positive value when a > b
{ cmp(a, b) } -> std::same_as<std::strong_ordering>;
};