Instead of lengthy blurbs, switch to single-line, machine-readable standardized (https://spdx.dev) license identifiers. The Linux kernel switched long ago, so there is strong precedent. Three cases are handled: AGPL-only, Apache-only, and dual licensed. For the latter case, I chose (AGPL-3.0-or-later and Apache-2.0), reasoning that our changes are extensive enough to apply our license. The changes we applied mechanically with a script, except to licenses/README.md. Closes #9937
36 lines
1.0 KiB
C++
36 lines
1.0 KiB
C++
/*
|
|
* Copyright (C) 2020-present ScyllaDB
|
|
*/
|
|
|
|
/*
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
*/
|
|
|
|
#pragma once
|
|
#include <type_traits>
|
|
#include <seastar/util/concepts.hh>
|
|
#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>;
|
|
};
|