2021-12-09 12:38:02 +01:00
|
|
|
#pragma once
|
|
|
|
|
#include <concepts>
|
2025-01-29 16:15:48 +01:00
|
|
|
#include <ranges>
|
2021-12-09 12:38:02 +01:00
|
|
|
|
2024-06-09 12:20:04 +02:00
|
|
|
namespace Seele {
|
2025-01-29 16:15:48 +01:00
|
|
|
|
|
|
|
|
template <typename Range, typename T>
|
|
|
|
|
concept container_compatible_range = (std::ranges::input_range<Range>) && std::convertible_to<std::ranges::range_reference_t<Range>, T>;
|
|
|
|
|
|
2024-06-09 12:20:04 +02:00
|
|
|
template <class F, class... Args>
|
2021-12-09 12:38:02 +01:00
|
|
|
concept invocable = std::invocable<F, Args...>;
|
2023-02-13 14:56:13 +01:00
|
|
|
|
2024-06-09 12:20:04 +02:00
|
|
|
template <class Archive, class T>
|
|
|
|
|
concept serializable = requires(const T& t, Archive& a) { t.save(a); } && requires(T& t, Archive& a) { t.load(a); };
|
|
|
|
|
template <typename T>
|
2023-02-13 14:56:13 +01:00
|
|
|
concept enumeration = std::is_enum_v<T>;
|
2024-06-09 12:20:04 +02:00
|
|
|
} // namespace Seele
|