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

/magnus/back_end/Enumerators/include/SGREnumerator.h

Go to the documentation of this file.
00001 /*
00002  *   $Id: 
00003  */
00004 
00005 // Copyright (C) 1998 The New York Group Theory Cooperative
00006 // See magnus/doc/COPYRIGHT for the full notice.
00007 
00008 // Contents: Definition of class RelatorEnumerator, an enumerator with
00009 //           an integrated general word problem.
00010 //           It allows the end user to guide the search for a general
00011 //           solution of the word problem. If and when one is found,
00012 //           it enumerates relators for a given subgroup, making some
00013 //           attempt to filter out redundant ones.
00014 //
00015 // Principal Author: Roger Needham, Alexei Myasnikov
00016 //
00017 // Status: in progress
00018 //
00019 // Revision History:
00020 //
00021 // @am Implemented as SMEnumerator.
00022 
00023 #ifndef _RELATORENUMERATOR_H_
00024 #define _RELATORENUMERATOR_H_
00025 
00026 
00027 #include "Supervisor.h"
00028 #include "SMSubgroup.h"
00029 #include "SMEnumerator.h"
00030 #include "File.h"
00031 
00032 
00033 
00034 //--------------------------------------------------------------------------//
00035 //---------------------- SGRelatorEnumeratorARCer --------------------------//
00036 //--------------------------------------------------------------------------//
00037 
00038 
00039 
00040 class SGRelatorEnumeratorARCer : public EnumeratorARCer
00041 {
00042 public:
00043 
00044   /////////////////////////////////////////////////////////////////////////
00045   //                                                                     //
00046   // Constructors:                                                       //
00047   //                                                                     //
00048   /////////////////////////////////////////////////////////////////////////
00049 
00050   SGRelatorEnumeratorARCer( ComputationManager& boss, SMListData& d ) 
00051     : EnumeratorARCer( boss, d ),
00052       firstStart(true),
00053       counter( 1 ),
00054       numberOfAll( 100 ){ } 
00055   
00056 
00057   /////////////////////////////////////////////////////////////////////////
00058   //                                                                     //
00059   // Accessors:                                                          //
00060   //                                                                     //
00061   /////////////////////////////////////////////////////////////////////////
00062 
00063   void setArguments( const class SMFPGroup* group,
00064                      const class SMSubgroup* subgroup );
00065 
00066   // Inherited from ARCer:
00067   // bool takeControl( );
00068   void setNumberOfAll( int n ) { numberOfAll = n; }
00069   bool ORisTrivial(const Word&  theTestWord);
00070 
00071   /////////////////////////////////////////////////////////////////////////
00072   //                                                                     //
00073   // IPC interaction members:                                            //
00074   //                                                                     //
00075   /////////////////////////////////////////////////////////////////////////
00076 
00077  
00078   void writeResults( ostream& );
00079 
00080   void readResults( istream& );
00081 
00082   Chars getFileName() const { return file.getFileName(); }
00083 protected:
00084   
00085   void enumerate();
00086   
00087 private:
00088 
00089 
00090   /////////////////////////////////////////////////////////////////////////
00091   //                                                                     //
00092   // Data Members:                                                       //
00093   //                                                                     //
00094   /////////////////////////////////////////////////////////////////////////
00095   const class SMSubgroup* theSMSubgroup;
00096   const class SMFPGroup* theGroup;
00097   Word possibleRelator;
00098   bool firstStart;
00099   int counter;
00100   int numberOfAll;
00101   File file;
00102 };
00103 
00104 
00105 //--------------------------------------------------------------------------//
00106 //----------------------- SGRelatorEnumerator ------------------------------//
00107 //--------------------------------------------------------------------------//
00108 
00109 class SGRelatorEnumerator : public  EnumeratorProblem< NoType >
00110 {
00111 public:
00112 
00113   /////////////////////////////////////////////////////////////////////////
00114   //                                                                     //
00115   // Constructors:                                                       //
00116   //                                                                     //
00117   /////////////////////////////////////////////////////////////////////////
00118 
00119   SGRelatorEnumerator( SMSubgroup&);
00120 
00121   /////////////////////////////////////////////////////////////////////////
00122   //                                                                     //
00123   // Front End Interfacing:                                              //
00124   //                                                                     //
00125   /////////////////////////////////////////////////////////////////////////
00126 
00127   void viewStructure(ostream& ostr) const;  // overrides SMObject
00128 
00129   /////////////////////////////////////////////////////////////////////////
00130   //                                                                     //
00131   // Accessors:                                                          //
00132   //                                                                     //
00133   /////////////////////////////////////////////////////////////////////////
00134 
00135   class SMSubgroup& getSubgroup() const { return theSMSubgroup;}
00136 
00137   /////////////////////////////////////////////////////////////////////////
00138   //                                                                     //
00139   // Control:                                                            //
00140   //                                                                     //
00141   /////////////////////////////////////////////////////////////////////////
00142 
00143   void takeControl( );         // overrides ComputationManager
00144 
00145   /////////////////////////////////////////////////////////////////////////
00146   //                                                                     //
00147   // State Transitions:                                                  //
00148   //                                                                     //
00149   /////////////////////////////////////////////////////////////////////////
00150 
00151   void start( ) {       // overrides ComputationManager
00152     int totalNum = getParameters().getValue("numberOfAll");
00153     arcer.setNumberOfAll( totalNum );
00154   }       
00155   
00156   void terminate( ) { }       // overrides ComputationManager
00157 
00158   void resume() {
00159     resumed = true;
00160     arcer.submitSignal();
00161     
00162     int totalNum = getParameters().getValue("numberOfAll");
00163     arcer.setNumberOfAll( totalNum );
00164 
00165   }
00166 
00167 private:
00168 
00169   /////////////////////////////////////////////////////////////////////////
00170   //                                                                     //
00171   // Data Members:                                                       //
00172   //                                                                     //
00173   /////////////////////////////////////////////////////////////////////////
00174 
00175   SMSubgroup& theSMSubgroup;
00176   SGRelatorEnumeratorARCer arcer;
00177  
00178   class GIC& theGIC;
00179 
00180   bool started;
00181   bool firstStart;  
00182   bool resumed;
00183   bool useORwordProblem;
00184   // GCM components this uses; only for automatic ARC passing:
00185 
00186   MirrorSubordinate kbSupervisor;
00187 
00188   MirrorSubordinate agSupervisor;
00189 
00190 };
00191 
00192 #endif

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