19#ifndef LIBSEMIGROUPS_TYPES_HPP_
20#define LIBSEMIGROUPS_TYPES_HPP_
29#include "detail/fmt.hpp"
30#include <magic_enum/magic_enum.hpp>
49 template <
typename Given,
typename Expected>
51 = std::enable_if_t<std::is_same_v<Given, Expected>, Expected>;
90 using type = std::conditional_t<
93 std::conditional_t<N >= 0x10000,
95 std::conditional_t<N >= 0x100, uint16_t, uint8_t>>>;
std::enable_if_t< std::is_same_v< Given, Expected >, Expected > enable_if_is_same
Alias equal to the second template parameter if both template parameters are equal.
Definition types.hpp:50
std::vector< letter_type > word_type
Type for a word over the generators of a semigroup.
Definition types.hpp:101
size_t letter_type
Type for the index of a generator of a semigroup.
Definition types.hpp:98
std::pair< word_type, word_type > relation_type
Type for a pair of word_type (a relation) of a semigroup.
Definition types.hpp:104
tril
Enum to indicate true, false or not currently knowable.
Definition types.hpp:56
congruence_kind
Enum to indicate the sided-ness of a congruence.
Definition types.hpp:69
@ FALSE
Value representing false.
Definition types.hpp:58
@ unknown
Value representing unknown (either true or false).
Definition types.hpp:62
@ TRUE
Value representing true.
Definition types.hpp:60
@ twosided
Value representing a two-sided congruence.
Definition types.hpp:73
@ onesided
Value representing a one-sided congruence.
Definition types.hpp:71
Namespace for everything in the libsemigroups library.
Definition action.hpp:44
Type giving the smallest unsigned integer type that can represent a template.
Definition types.hpp:86
std::conditional_t< N >=0x100000000, uint64_t, std::conditional_t< N >=0x10000, uint32_t, std::conditional_t< N >=0x100, uint16_t, uint8_t > > > type
Definition types.hpp:89