libsemigroups  v3.0.0
C++ library for semigroups and monoids
Loading...
Searching...
No Matches
FroidurePinTraits< Element, State >
template<typename Element, typename State = typename FroidurePinState<Element>::type>
struct libsemigroups::FroidurePinTraits< Element, State >

Defined in froidure-pin.hpp.

This is a traits class for use with FroidurePin.

Template Parameters
Elementthe type of the elements.
Statethe type of the state (if any, defaults to void, meaning none).
See also
FroidurePinBase and FroidurePin.

Public Types

using Complexity = ::libsemigroups::Complexity<element_type>
 Adapter for the complexity of multiplication.
 
using Degree = ::libsemigroups::Degree<element_type>
 Adapter for the degree of an element.
 
using element_type = typename detail::BruidhinnTraits<Element>::value_type
 The type of the elements of a FroidurePin instance.
 
using EqualTo = ::libsemigroups::EqualTo<element_type>
 Adapter for testing equality.
 
using Hash = ::libsemigroups::Hash<element_type>
 Adapter for hashing.
 
using IncreaseDegree = ::libsemigroups::IncreaseDegree<element_type>
 Adapter for increasing the degree of an element.
 
using Less = ::libsemigroups::Less<element_type>
 Adapter for comparisons.
 
using One = ::libsemigroups::One<element_type>
 Adapter for the identity element of the given type.
 
using Product = ::libsemigroups::Product<element_type>
 Adapter for the product of two elements.
 
using state_type = State
 The type of the state (if any).
 
using Swap = ::libsemigroups::Swap<element_type>
 Adapter for swapping.
 

Member Typedef Documentation

◆ Complexity

template<typename Element, typename State = typename FroidurePinState<Element>::type>
using Complexity = ::libsemigroups::Complexity<element_type>

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 approximate complexity of multiplying two instances of Element, which may or may not depend on the parameter x. This is used, for example, by FroidurePin in some member functions to determine whether it is better to multiply elements or to follow a path in the Cayley graph.

Template Parameters
Elementthe type of the elements of a semigroup.

The second template parameter exists for SFINAE.

Used by:
Example
template <>
struct Complexity<KBE> {
constexpr size_t operator()(KBE const&) const noexcept {
return LIMIT_MAX;
}
};
LimitMax const LIMIT_MAX
Value for the maximum of something.
::libsemigroups::Complexity< element_type > Complexity
Adapter for the complexity of multiplication.
Definition froidure-pin.hpp:84

◆ Degree

template<typename Element, typename State = typename FroidurePinState<Element>::type>
using Degree = ::libsemigroups::Degree<element_type>

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.

Template Parameters
Elementthe type of the elements of a semigroup.

The second template parameter exists for SFINAE.

Used by:
Example
template <>
struct Degree<BMat8> {
constexpr inline size_t operator()(BMat8 const&) const noexcept {
return 8;
}
};
Fast boolean matrices of dimension up to 8 x 8.
Definition bmat8.hpp:74
::libsemigroups::Degree< element_type > Degree
Adapter for the degree of an element.
Definition froidure-pin.hpp:87

◆ element_type

template<typename Element, typename State = typename FroidurePinState<Element>::type>
using element_type = typename detail::BruidhinnTraits<Element>::value_type

This type has const removed, and if Element is a pointer to const, then the second const is also removed.

◆ EqualTo

template<typename Element, typename State = typename FroidurePinState<Element>::type>
using EqualTo = ::libsemigroups::EqualTo<element_type>

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.

Template Parameters
Valuethe type of objects to compare.

The second template parameter exists for SFINAE.

Used by:

◆ Hash

template<typename Element, typename State = typename FroidurePinState<Element>::type>
using Hash = ::libsemigroups::Hash<element_type>

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.

Template Parameters
Valuethe type of objects to compare.

The second template parameter exists for SFINAE.

Used by:

◆ IncreaseDegree

template<typename Element, typename State = typename FroidurePinState<Element>::type>
using IncreaseDegree = ::libsemigroups::IncreaseDegree<element_type>

Defined in adapters.hpp.

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

The call operator should change the first argument in-place so that if m = Degree<Element>()(x), then after the call to IncreaseDegree<Element>()(x, n), Degree<Element>()(x) returns m + n. This only makes sense for certain types of elements, such as permutations, transformations, or matrices, and not for other types of object. In the latter case, the call operator should simply do nothing. This is used, for example, in the member function FroidurePin::closure, when one of the generators being added has degree larger than the existing generators.

Template Parameters
Elementthe type of the elements of a semigroup.

The second template parameter exists for SFINAE.

Used by:
Example
template <typename Integral>
Integral,
typename std::enable_if<std::is_integral<Integral>::value>::type>
{
void operator()(Integral&, size_t) const noexcept {
}
};
::libsemigroups::IncreaseDegree< element_type > IncreaseDegree
Adapter for increasing the degree of an element.
Definition froidure-pin.hpp:96

◆ Less

template<typename Element, typename State = typename FroidurePinState<Element>::type>
using Less = ::libsemigroups::Less<element_type>

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) which defines a linear order on the objects of type Value.

Template Parameters
Valuethe type of objects to compare.

The second template parameter exists for SFINAE.

Used by:

◆ One

template<typename Element, typename State = typename FroidurePinState<Element>::type>
using One = ::libsemigroups::One<element_type>

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

  1. 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.
  2. Element operator()(T const&) const (possibly noexcept, inline and/or constexpr also). This could be implemented as:
    Element operator()(Element const& x) const noexcept {
    return this->operator()(Degree<Element>()(x));
    }
Template Parameters
Elementthe type of the elements of a semigroup.

The second template parameter exists for SFINAE.

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();
}
};
::libsemigroups::One< element_type > One
Adapter for the identity element of the given type.
Definition froidure-pin.hpp:102

◆ Product

template<typename Element, typename State = typename FroidurePinState<Element>::type>
using Product = ::libsemigroups::Product<element_type>

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.

Template Parameters
Elementthe type of the elements of a semigroup.

The second template parameter exists for SFINAE.

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;
}
};
::libsemigroups::Product< element_type > Product
Adapter for the product of two elements.
Definition froidure-pin.hpp:105

◆ state_type

template<typename Element, typename State = typename FroidurePinState<Element>::type>
using state_type = State

This type can be used to store some state that might be required in an FroidurePin instance.

◆ Swap

template<typename Element, typename State = typename FroidurePinState<Element>::type>
using Swap = ::libsemigroups::Swap<element_type>

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.

Template Parameters
Valuethe type of objects to swap.

The second template parameter exists for SFINAE.

Used by:

The documentation for this struct was generated from the following file: