00001 00002 #ifndef _AdvDehnAlgorithm_h_ 00003 #define _AdvDehnAlgorithm_h_ 00004 00005 #include "FPGroup.h" 00006 00007 #include "GraphType.h" 00008 #include "GraphConcept.h" 00009 #include "GraphConceptAlgorithms.h" 00010 using namespace Graphs; 00011 00012 00013 //---------------------------------------------------------------------------// 00014 //--------------------------- AdvDehnAlgorithm ------------------------------// 00015 //---------------------------------------------------------------------------// 00016 00024 class AdvDehnAlgorithm 00025 { 00026 00028 // // 00029 // Constructor: // 00030 // // 00032 00033 public: 00034 00035 AdvDehnAlgorithm( const FPGroup& G , const Word& w ); 00036 AdvDehnAlgorithm( const FPGroup& G , const set< Word >& gens , const Word& w ); 00037 00038 00040 // // 00041 // Accessors: // 00042 // // 00044 00045 public: 00046 00047 const IntLabeledGraph& getFSA( ) const { return theFSA; } 00048 bool builtup( set< Word >* conj=0 , int coset_limit=100000 ); 00049 // we need conjugators to construct a generating set for the automaton 00050 00051 bool isLoop( const Word& w ) const; 00052 00054 // // 00055 // Manipulators: // 00056 // // 00058 00059 private: 00060 00061 void addCycle( const Word& w , int origin ); 00062 // function ported from my dehn.C file 00063 // I should unify it somehow 00064 00065 00067 // // 00068 // Data members: // 00069 // // 00071 00072 private: 00073 00074 const FPGroup theGroup; 00075 const Word theWord; 00076 00077 set< int > checkedStates; 00078 00079 IntLabeledGraph theFSA; 00080 }; 00081 00082 00083 00084 00085 #endif