This is a traits class for use with Action, LeftAction, and RightAction.
| Element | the type of the elements. |
| Point | the type of the points acted on. |
Public Types | |
| using | Degree = ::libsemigroups::Degree<Element> |
| Adapter for the degree of an element. | |
| using | EqualTo = ::libsemigroups::EqualTo<Point> |
| Adapter for testing equality. | |
| using | Hash = ::libsemigroups::Hash<Point> |
| Adapter for hashing. | |
| using | One = ::libsemigroups::One<Element> |
| Adapter for the identity element of the given type. | |
| using | Product = ::libsemigroups::Product<Element> |
| Adapter for the product of two elements. | |
| using | Swap = ::libsemigroups::Swap<Element> |
| Adapter for swapping. | |
| using Degree = ::libsemigroups::Degree<Element> |
Defined in adapters.hpp.
Specialisations of this struct should be stateless trivially default constructible with a call operator of signature size_t operator()(Element const& x) const (possibly noexcept, inline and/or constexpr also).
The return value of the call operator ought to indicate the degree of a Element 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.
| Element | the type of the elements of a semigroup. |
The second template parameter exists for SFINAE.
| using EqualTo = ::libsemigroups::EqualTo<Point> |
Defined in adapters.hpp.
This type should be a stateless trivially default constructible with a call operator of signature bool operator()(Value const&, Value const&) (possibly noexcept, inline and/or constexpr also) for use with, for example, std::unordered_map.
| Value | the type of objects to compare. |
The second template parameter exists for SFINAE.
| using Hash = ::libsemigroups::Hash<Point> |
Defined in adapters.hpp.
This type should be a stateless trivially default constructible with a call operator of signature size_t operator()(Value const&) for use with, for example, std::unordered_map.
| Value | the type of objects to compare. |
The second template parameter exists for SFINAE.
| using One = ::libsemigroups::One<Element> |
Specialisations of this struct should be stateless trivially default constructible with two call operator of signatures:
Element operator()(size_t n) const (possibly noexcept, inline and/or constexpr also) returning a multiplicative identity element for the category Element and with Degree<Element>()(x) equal to the parameter n. For example, if Element is a type of n x n matrices, then this should return the n x n identity matrix.Element operator()(T const&) const (possibly noexcept, inline and/or constexpr also). This could be implemented as: | Element | the type of the elements of a semigroup. |
The second template parameter exists for SFINAE.
| using Product = ::libsemigroups::Product<Element> |
Defined in adapters.hpp.
Specialisations of this struct should be stateless trivially default constructible with a call operator of signature void operator()(Element&, Element const&, Element const&, 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.
| Element | the type of the elements of a semigroup. |
The second template parameter exists for SFINAE.
| using Swap = ::libsemigroups::Swap<Element> |
Defined in adapters.hpp.
This type should be a stateless trivially default constructible with a call operator of signature void operator()(Value&, Value&) (possibly noexcept, inline and/or constexpr also) which swaps its arguments.
| Value | the type of objects to swap. |
The second template parameter exists for SFINAE.