Program Listing for File LatticeConcept.hpp
↰ Return to documentation for file (UnionFindPy/cpp/include/LatticeConcept.hpp)
#pragma once
#include "utility.hpp"
#include <array>
#include <concepts>
#include <vector>
namespace UnionFindCPP
{
namespace detail
{
template<typename T> struct is_std_array : std::false_type
{
};
template<typename T, std::size_t N>
struct is_std_array<std::array<T, N>> : std::true_type
{
};
template<typename T> concept std_array = is_std_array<T>::value;
} // namespace detail
template<typename T>
concept vertex_connections_result
= std::convertible_to<T, std::vector<uint32_t>> || detail::std_array<T>;
template<typename T>
concept LatticeConcept = requires(const T lattice, uint32_t vertex, Edge e)
{
{
lattice.num_vertices()
} -> std::convertible_to<uint32_t>;
{
lattice.num_edges()
} -> std::convertible_to<uint32_t>;
{
lattice.vertex_connections(vertex)
} -> vertex_connections_result;
{
lattice.vertex_connection_count(vertex)
} -> std::convertible_to<uint32_t>;
{
lattice.edge_idx(e)
} -> std::convertible_to<uint32_t>;
};
} // namespace UnionFindCPP