Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

/magnus/back_end/SMApps/include/OrderOfElt.h

Go to the documentation of this file.
00001 /*
00002  *   $Id: OrderOfElt.h,v 1.3 1997/07/11 18:36:22 alex Exp $
00003  */
00004  
00005 // Copyright (C) 1995 The New York Group Theory Cooperative
00006 // See magnus/doc/COPYRIGHT for the full notice.
00007 //
00008 // Contents: Declaration of classes OrderOfEltARCer, OrderOfElt
00009 //
00010 // Principal Author: Dmitry Bormotov
00011 //
00012 // Status: in progress
00013 //
00014 // Revision History:
00015 //
00016 
00017 
00018 #ifndef _OrderOfElt_h_
00019 #define _OrderOfElt_h_
00020 
00021 
00022 #include "Supervisor.h"
00023 #include "SetOfWordsChecker.h"
00024 #include "NilpotentProblems.h"
00025 
00026 //---------------------------------------------------------------------------//
00027 //---------------------------- OrderOfEltInQuotients------------------------//
00028 //---------------------------------------------------------------------------//
00029 
00030 
00031 class OrderOfEltInQuotients : public ComputationManager
00032 {
00033 public:
00034   
00035   /////////////////////////////////////////////////////////////////////////
00036   //                                                                     //
00037   // Constructors:                                                       //
00038   //                                                                     //
00039   /////////////////////////////////////////////////////////////////////////
00040 
00041   OrderOfEltInQuotients(class OrderOfElt& sup);
00042 
00043   /////////////////////////////////////////////////////////////////////////
00044   //                                                                     //
00045   // Accessors:                                                          //
00046   //                                                                     //
00047   /////////////////////////////////////////////////////////////////////////
00048 
00049   /////////////////////////////////////////////////////////////////////////
00050   //                                                                     //
00051   // Control:                                                            //
00052   //                                                                     //
00053   /////////////////////////////////////////////////////////////////////////
00054 
00055   void takeControl( );         // overrides ComputationManager
00056 
00057   /////////////////////////////////////////////////////////////////////////
00058   //                                                                     //
00059   // State Transitions:                                                  //
00060   //                                                                     //
00061   /////////////////////////////////////////////////////////////////////////
00062 
00063   void start( ){ };              // overrides ComputationManager
00064 
00065   void terminate( ) { };          // overrides ComputationManager
00066 
00067 
00068 private:
00069   /////////////////////////////////////////////////////////////////////////
00070   //                                                                     //
00071   // Data Members:                                                       //
00072   //                                                                     //
00073   /////////////////////////////////////////////////////////////////////////
00074 
00075   class SMWord& theWord;
00076   const SMFPGroup& theGroup;
00077 
00078   int currentClass;
00079   // Class of quotient in which the word problem is solving.
00080 
00081   int upperBound;
00082   // Upper class for quotients. For nilpotent groups - nilpotency class-1,
00083   // for others - 10.
00084 
00085   NGOrderOfEltProblemARCer arcer;
00086   bool isStarted;
00087 
00088 };
00089 // -------------------------- OrderOfEltARCer ------------------------------ //
00090 
00091 
00092 class OrderOfEltARCer : public ARCer
00093 {
00094 public:
00095 
00096   /////////////////////////////////////////////////////////////////////////
00097   //                                                                     //
00098   // Constructors:                                                       //
00099   //                                                                     //
00100   /////////////////////////////////////////////////////////////////////////
00101 
00102   OrderOfEltARCer( ComputationManager& boss, 
00103                    const class SMFPGroup& group, 
00104                    const Word& word );
00105 
00106 
00107   /////////////////////////////////////////////////////////////////////////
00108   //                                                                     //
00109   // Accessors:                                                          //
00110   //                                                                     //
00111   /////////////////////////////////////////////////////////////////////////
00112 
00113   int getRetValue() { return retValue; }
00114   int getCurrentPower() const{ return power; }
00115   void setCurrentPower(const int& p) { power = p; }
00116 
00117   // Inherited from ARCer:
00118   // bool takeControl( );
00119 
00120 
00121   /////////////////////////////////////////////////////////////////////////
00122   //                                                                     //
00123   // IPC interaction members:                                            //
00124   //                                                                     //
00125   /////////////////////////////////////////////////////////////////////////
00126 
00127   void runComputation( );
00128  
00129   void writeResults( ostream& );
00130 
00131   void readResults( istream& );
00132 
00133 
00134 private:
00135 
00136   /////////////////////////////////////////////////////////////////////////
00137   //                                                                     //
00138   // Data Members:                                                       //
00139   //                                                                     //
00140   /////////////////////////////////////////////////////////////////////////
00141 
00142   const class SMFPGroup& theGroup;
00143 
00144   Word theWord;
00145 
00146   Word current;
00147 
00148   int retValue;
00149 
00150   int power;
00151 };
00152 
00153 
00154 // ---------------------------- OrderOfElt --------------------------------- //
00155 
00156 
00157 class OrderOfElt : public Supervisor
00158 {
00159 
00160 public:
00161 
00162   /////////////////////////////////////////////////////////////////////////
00163   //                                                                     //
00164   // Constructors:                                                       //
00165   //                                                                     //
00166   /////////////////////////////////////////////////////////////////////////
00167 
00168   OrderOfElt( class SMWord& );
00169 
00170   /////////////////////////////////////////////////////////////////////////
00171   //                                                                     //
00172   // Accessors:                                                          //
00173   //                                                                     //
00174   /////////////////////////////////////////////////////////////////////////
00175 
00176     SMWord& getWord() {return theWord;}
00177 
00178   /////////////////////////////////////////////////////////////////////////
00179   //                                                                     //
00180   // Front End Interfacing:                                              //
00181   //                                                                     //
00182   /////////////////////////////////////////////////////////////////////////
00183 
00184   void viewStructure(ostream& ostr) const;  // overrides SMObject
00185 
00186   /////////////////////////////////////////////////////////////////////////
00187   //                                                                     //
00188   // Control:                                                            //
00189   //                                                                     //
00190   /////////////////////////////////////////////////////////////////////////
00191 
00192   void takeControl( );         // overrides ComputationManager
00193 
00194   /////////////////////////////////////////////////////////////////////////
00195   //                                                                     //
00196   // State Transitions:                                                  //
00197   //                                                                     //
00198   /////////////////////////////////////////////////////////////////////////
00199 
00200   void start( ) { }            // overrides ComputationManager
00201 
00202   void terminate( ) { }        // overrides ComputationManager
00203 
00204 
00205 private:
00206 
00207   /////////////////////////////////////////////////////////////////////////
00208   //                                                                     //
00209   // Private functions:                                                  //
00210   //                                                                     //
00211   /////////////////////////////////////////////////////////////////////////
00212 
00213   int getOrder( );
00214 
00215 
00216   /////////////////////////////////////////////////////////////////////////
00217   //                                                                     //
00218   // Data Members:                                                       //
00219   //                                                                     //
00220   /////////////////////////////////////////////////////////////////////////
00221 
00222   SMWord& theWord;
00223 
00224   OrderOfEltARCer theArcer;
00225 
00226   bool triedAbelianization;
00227 
00228   Chars explanation;
00229 
00230 
00231   // GCM components this uses; only for automatic ARC passing:
00232 
00233   MirrorSubordinate normalClosure;
00234 
00235   MirrorSubordinate abelianInvariants;
00236 
00237   MirrorSubordinate kbSupervisor;
00238 
00239   MirrorSubordinate agSupervisor;
00240 
00241   MirrorSubordinate nilpotentQuotients;
00242 
00243   Subordinate<OrderOfElt,OrderOfEltInQuotients> orderOfEltInQuotients;
00244 };
00245 
00246 #endif

Generated at Tue Jun 19 09:49:43 2001 for Magnus Classes by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001