33 #ifndef SCHREIERTRANSVERSAL_H_
34 #define SCHREIERTRANSVERSAL_H_
36 #include <permlib/transversal/transversal.h>
40 namespace exports {
struct BSGSSchreierExport;
struct BSGSSchreierImport; }
50 virtual PERM*
at(
unsigned long val)
const;
52 virtual void updateGenerators(
const std::map<PERM*,typename PERM::ptr>& generatorChange);
64 virtual void registerMove(
unsigned long from,
unsigned long to,
const typename PERM::ptr &p);
95 if (transversal[val] == 0) {
99 unsigned int depth = 1;
100 PERM *res =
new PERM(*transversal[val]);
103 unsigned long pred = *res % val;
105 while (pred != val) {
106 inv = transversal[pred].get();
108 PERMLIB_DEBUG(std::cout <<
"Schreier2 " << inv <<
" / " << val <<
" , " << pred << std::endl;)
114 m_statMaxDepth = std::max(m_statMaxDepth, depth);
119 template <
class PERM>
121 unsigned int missedCount = 0;
122 BOOST_FOREACH(
typename PERM::ptr& p, this->m_transversal) {
126 typename std::map<PERM*,typename PERM::ptr>::const_iterator pIt = generatorChange.find(p.get());
128 if (pIt != generatorChange.end()) {
136 BOOST_ASSERT( missedCount == 1 );
139 template <
class PERM>
148 #endif // -- SCHREIERTRANSVERSAL_H_