This page contains information about the adapters contained in the Konieczny class.

using libsemigroups::Konieczny::Degree = typename TTraits::Degree

Adapter for the degree of an element.

Defined in adapters.hpp.

Specialisations of this struct should be stateless trivially default constructible with a call operator of signature size_t operator()(TElementType const& x) const (possibly noexcept, inline and/or constexpr also).

The return value of the call operator ought to indicate the degree of a TElementType instance which may or may not depend on the parameter x. The degree of a permutation, for instance, would be the the number of points it acts on, the degree of a matrix is its dimension, and so on. This is used, for example, by SchreierSimsTraits in some member functions to determine whether it is known a priori that a permutation does not belong to the object, because it acts on too many points.

Used by:

Example

template <>
struct Degree<BMat8> {
constexpr inline size_t operator()(BMat8 const&) const noexcept {
return 8;
}
};


Template Parameters
• TElementType – the type of the elements of a semigroup.

• TSfinae – this template parameter can be used for SFINAE.

using libsemigroups::Konieczny::EqualTo = typename TTraits::EqualTo

Defined in adapters.hpp.

This type should be a stateless trivially default constructible with a call operator of signature bool operator()(TValueType const&, TValueType const&) (possibly noexcept, inline and/or constexpr also) for use with, for example, std::unordered_map.

Used by:

Template Parameters
• TValueType – the type of objects to compare.

• TSfinae – this template parameter can be used for SFINAE.

using libsemigroups::Konieczny::Lambda = typename TTraits::Lambda

Adapter for the action on LambdaValue’s.

Defined in adapters.hpp.

This type should be a stateless trivially default constructible with an operator of signature void operator()(TPointType&, TElementType const&), which should modify the first argument in-place to contain the lambda value of the second argument. The kernel of the lambda function should be Green’s $$\mathscr{L}$$-relation on the semigroup in question.

Used by:

Template Parameters
• TElementType – the type of elements.

• TPointType – the type of the lambda points.

using libsemigroups::Konieczny::Less = typename TTraits::Less

Defined in adapters.hpp.

This type should be a stateless trivially default constructible with a call operator of signature bool operator()(TValueType const&, TValueType const&) (possibly noexcept, inline and/or constexpr also) which defines a linear order on the objects of type TValueType

Used by:

Template Parameters
• TValueType – the type of objects to compare.

• TSfinae – this template parameter can be used for SFINAE.

using libsemigroups::Konieczny::One = typename TTraits::One

Adapter for the identity element of the given type.

Specialisations of this struct should be stateless trivially default constructible with two call operator of signatures:

1. TElementType operator()(size_t n) const (possibly noexcept, inline and/or constexpr also) returning a multiplicative identity element for the category TElementType and with Degree<TElementType>()(x) equal to the parameter n. For example, if TElementType is a type of n x n matrices, then this should return the n x n identity matrix.

2. TElementType operator()(T const&) const (possibly noexcept, inline and/or constexpr also). This could be implemented as:

TElementType operator()(TElementType const& x) const noexcept {
return this->operator()(Degree<TElementType>()(x));
}


Used by:

Example

template <typename T>
struct One<
T,
typename std::enable_if<std::is_base_of<PTransf16, T>::value>::type> {
T operator()(size_t = 0) const noexcept {
return T::one();
}

T operator()(T const&) const noexcept {
return T::one();
}
};


Template Parameters
• TElementType – the type of the elements of a semigroup.

• TSfinae – this template parameter can be used for SFINAE.

using libsemigroups::Konieczny::Product = typename TTraits::Product

Adapter for the product of two elements.

Defined in adapters.hpp.

Specialisations of this struct should be stateless trivially default constructible with a call operator of signature void operator()(TElementType& xy, TElementType const& x, TElementType const& y, size_t = 0) (possibly noexcept, inline and/or constexpr also).

The call operator should change xy in-place to be the product of x and y. The 4th parameter is optional and it can be used as an index for static thread local storage, that might be required for forming the product of x and y. The purpose of the 1st parameter is to avoid repeated allocations of memory to hold temporary products that are discarded soon after they are created.

Used by:

Example

template <>
struct Product<size_t> {
void operator()(size_t& xy, size_t x, size_t y, size_t = 0) const
noexcept {
xy = x * y;
}
};


Template Parameters
• TElementType – the type of the elements of a semigroup.

• TSfinae – this template parameter can be used for SFINAE.

using libsemigroups::Konieczny::Rank = typename TTraits::Rank

Defined in adapters.hpp.

This type should be default constructible and a call operator of signature size_t operator()(TElementType const&) if no additional data is required to compute the rank, or a call operator of signature size_t operator()(TStateType<TElementType> const&, TElementType const&) if additional data is required.

The call operator should return the rank of the element given as argument. This must satisfy the following properties:

• $$\operatorname{rank}$$ should agree with the $$D$$-order on the semigroup; that is, if $$D_x \leq D_y$$, then $$\operatorname{rank}(x) \leq \operatorname{rank}(y)$$,

• if $$D_x \leq D_y$$ and $$\operatorname{rank}(x) = \operatorname{rank}(y)$$, then $$D_x = D_y$$.

Used by:

Template Parameters
• TElementType – the type of elements.

• TStateType – the type of the data required to compute ranks of TElementTypes; defaults to RankState<TElementType>.

using libsemigroups::Konieczny::Rho = typename TTraits::Rho

Adapter for the action on RhoValue’s.

Defined in adapters.hpp.

This type should be a stateless trivially default constructible with an operator of signature void operator()(TPointType&, TElementType const&), which should modify the first argument in-place to contain the rho value of the second argument. The kernel of the rho function should be Green’s $$\mathscr{R}$$-relation on the semigroup in question.

Used by:

Template Parameters
• TElementType – the type of elements.

• TPointType – the type of the rho points.

using libsemigroups::Konieczny::Swap = typename TTraits::Swap

Defined in adapters.hpp.
This type should be a stateless trivially default constructible with a call operator of signature void operator()(TValueType const&, TValueType const&) (possibly noexcept, inline and/or constexpr also) which swaps its arguments.