3.2.4. group.hpp

Full path: group/group.hpp

template<typename GroupT>
concept Group
Associated Types

using allocator = typename GroupT::allocator
using perm = typename GroupT::perm
using pointer = typename allocator::pointer
using const_pointer = typename allocator::const_pointer

Requires Permutation<perm> and Allocator<allocator>.

Notation

GroupT g
const GroupT cg
Valid Expressions

  • cg.degree(), returns an integer with the number of elements the group is defined on.

  • cg.generators(), returns a non-empty random-access range of perm.

  • cg.generator_ptrs(), returns a random-access range of pointer-like values to perm. The range and order of the dereferenced pointers must be exactly the range returned by cg.generators().

  • cg.get_allocator(), returns the allocator used by the group.

template<typename GroupT>
concept Stabilizer

A refinement of the Group concept.

A stabilizer fixes a specific element in some base group. The user must keep track of this base group and what information has been given to the stabilizer.

Requires Moveable<GroupT>.

Associated Types

using is_accurate = typename GroupT::is_accurate

A type convertible to std::true_type or std::false_type, denoting whether the group will represent the full stabilizer or if it potentially only represents a proper subgroup of the full stabilizer.

Notation

GroupT g
const GroupT cg
PtrIterator first
PtrIterator lastOld
PtrIterator lastNew

Iterators over GroupT::const_pointer denoting the consequtive ranges first to lastOld and lastOld to lastNew.

Callback callback

A Callable accepting three iterator type of equal type. The iterators are the type of pointer iterators given by this group in its cg.generator_ptrs() method.

Valid Expressions

  • cg.fixed_element(), returning an element which defines this stablizer.

  • g.add_generators(first, lastOld, lastNew): notifies this stabilizer that the base group has been extended with the permutations denoted indirectly by lastOld to lastNew. The range first to lastOld must be the range previously given to this stabilizer as first to lastNew. If not previous g.add_generators call has been made, then first == lastNew.

    The stabilizer will decide if these new permutations in the base group warrents an extension of its generating set. This decision must be in accordance with the is_accurate type.

  • g.add_generators(first, lastOld, lastNew, callback): as the other g.add_generators function, but with a notification callback. If new permutations are added to this stabilizer, the callback will be called at least once with three pointer iterators stabFirst, stabLastOld, and stabLastNew. These iterators have the same semantics as the given iterators, but for the stabilizer it self.