29 lines
836 B
C++
29 lines
836 B
C++
#pragma once
|
|
|
|
#include <concepts>
|
|
#include <ranges>
|
|
|
|
namespace snplib
|
|
{
|
|
|
|
// type T is hashable
|
|
template <typename T>
|
|
concept snplib_hashable_c = requires(T t) {
|
|
{ std::hash<T>{}(t) } -> std::convertible_to<size_t>;
|
|
};
|
|
|
|
template <typename T, typename CharT = char>
|
|
concept snplib_char_range_c = std::ranges::range<T> && std::same_as<std::ranges::range_value_t<T>, CharT>;
|
|
|
|
template <typename T, typename CharT = char>
|
|
concept snplib_input_char_range_c = std::ranges::input_range<T> && std::same_as<std::ranges::range_value_t<T>, CharT>;
|
|
|
|
template <typename T, typename CharT = char>
|
|
concept snplib_output_char_range_c = std::ranges::output_range<T, CharT>;
|
|
|
|
template <typename T, typename CharT = char>
|
|
concept snplib_char_view_c = std::ranges::view<T> && std::same_as<std::ranges::range_value_t<T>, CharT>;
|
|
|
|
|
|
|
|
} // namespace snplib
|