stateful generator of Schreier generators More...
#include <schreier_generator.h>
Public Types | |
typedef PERMlist::const_iterator | PERMlistIt |
const iterator to a list of PERMutations | |
typedef std::list< ulong > ::const_iterator | TRANSlistIt |
const iterator to a list of points (ulong) | |
typedef PERMlist::const_iterator | PERMlistIt |
const iterator to a list of PERMutations | |
typedef std::list< ulong > ::const_iterator | TRANSlistIt |
const iterator to a list of points (ulong) | |
Public Member Functions | |
SchreierGenerator (const TRANS *U, PERMlistIt S_begin, PERMlistIt S_end) | |
constructor | |
PERM | next () |
generates an element | |
bool | hasNext () |
true, iff more elements can be generated | |
void | update (TRANS *U, PERMlistIt S_begin, PERMlistIt S_end) |
updates transversal and group generators that the Schreier generators are constructed from | |
void | update (uint j) |
updates the state of this generator | |
SchreierGenerator (const TRANS *U, PERMlistIt S_begin, PERMlistIt S_end) | |
constructor | |
PERM | next () |
generates an element | |
bool | hasNext () |
true, iff more elements can be generated | |
void | update (TRANS *U, PERMlistIt S_begin, PERMlistIt S_end) |
updates transversal and group generators that the Schreier generators are constructed from | |
void | update (uint j) |
updates the state of this generator |
stateful generator of Schreier generators
Constructs all Schreier generators from given transversal and generators.
The idea is something like forall(u in U) { forall(s in S) { buildSchreierGenerator(u,s); } } only that U and S can be updated without iterating over the same pair (u,s) twice, ensuring that every pair (u,s) is used at least once (if so many generators are requested via next() ).
permlib::SchreierGenerator< PERM, TRANS >::SchreierGenerator | ( | const TRANS * | U, | |
PERMlistIt | S_begin, | |||
PERMlistIt | S_end | |||
) | [inline] |
constructor
U | transversal to build Schreier generators from | |
S_begin | begin iterator of group generating list to build Schreier generators from | |
S_end | begin iterator of group generating list to build Schreier generators from |
permlib::SchreierGenerator< PERM, TRANS >::SchreierGenerator | ( | const TRANS * | U, | |
PERMlistIt | S_begin, | |||
PERMlistIt | S_end | |||
) |
constructor
U | transversal to build Schreier generators from | |
S_begin | begin iterator of group generating list to build Schreier generators from | |
S_end | begin iterator of group generating list to build Schreier generators from |
void permlib::SchreierGenerator< PERM, TRANS >::update | ( | uint | j | ) |
updates the state of this generator
Saves the current state. Before returning to the current state, all Schreier generators from S[j], S[j+1], &c. and the already visited transversals are next
void permlib::SchreierGenerator< PERM, TRANS >::update | ( | TRANS * | U, | |
PERMlistIt | S_begin, | |||
PERMlistIt | S_end | |||
) |
updates transversal and group generators that the Schreier generators are constructed from
U | transversal to build Schreier generators from | |
S_begin | begin iterator of group generating list to build Schreier generators from | |
S_end | begin iterator of group generating list to build Schreier generators from |
void permlib::SchreierGenerator< PERM, TRANS >::update | ( | uint | j | ) | [inline] |
updates the state of this generator
Saves the current state. Before returning to the current state, all Schreier generators from S[j], S[j+1], &c. and the already visited transversals are next
void permlib::SchreierGenerator< PERM, TRANS >::update | ( | TRANS * | U, | |
PERMlistIt | S_begin, | |||
PERMlistIt | S_end | |||
) | [inline] |
updates transversal and group generators that the Schreier generators are constructed from
U | transversal to build Schreier generators from | |
S_begin | begin iterator of group generating list to build Schreier generators from | |
S_end | begin iterator of group generating list to build Schreier generators from |