/* * Copyright (C) 2020 ScyllaDB */ /* * This file is part of Scylla. * * Scylla is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Scylla is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Scylla. If not, see . */ #pragma once #include #include SEASTAR_CONCEPT( template concept Disposer = requires (Func f, T* val) { { f(val) } noexcept -> std::same_as; }; ) SEASTAR_CONCEPT( template concept LessComparable = requires (const Key1& a, const Key2& b, Less less) { { less(a, b) } -> std::same_as; { less(b, a) } -> std::same_as; }; template concept LessNothrowComparable = LessComparable && std::is_nothrow_invocable_v; ) SEASTAR_CONCEPT( template 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; }; )