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

/magnus/back_end/SMApps/include/IsFreeProblem.h

Go to the documentation of this file.
00001 /*
00002  *   $Id: IsFreeProblem.h,v 1.1.1.1 1996/12/05 19:45:06 bormotov 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 class IsFreeProblem
00009 //
00010 // Principal Author: Dmitry Bormotov
00011 //
00012 // Status: in progress
00013 //
00014 // Revision History:
00015 //
00016 
00017 
00018 #ifndef _IS_FREE_PROBLEM_H_
00019 #define _IS_FREE_PROBLEM_H_
00020 
00021 
00022 #include "SMFPGroup.h"
00023 #include "ORProblems.h"
00024 #include "ARCer.h"
00025 
00026 
00027 // ----------------------- ORIsFreeProblemARCer ---------------------------- //
00028 
00029 
00030 class ORIsFreeProblemARCer : public ARCer
00031 {
00032 public:
00033 
00034   /////////////////////////////////////////////////////////////////////////
00035   //                                                                     //
00036   // Constructors:                                                       //
00037   //                                                                     //
00038   /////////////////////////////////////////////////////////////////////////
00039 
00040   ORIsFreeProblemARCer( ComputationManager& boss ) : ARCer( boss ) { } 
00041 
00042 
00043   /////////////////////////////////////////////////////////////////////////
00044   //                                                                     //
00045   // Accessors:                                                          //
00046   //                                                                     //
00047   /////////////////////////////////////////////////////////////////////////
00048 
00049   void setArguments(ORProblems* );
00050 
00051   bool getRetValue() { return retValue; }
00052 
00053   // Inherited from ARCer:
00054   // bool takeControl( );
00055 
00056 
00057   /////////////////////////////////////////////////////////////////////////
00058   //                                                                     //
00059   // IPC interaction members:                                            //
00060   //                                                                     //
00061   /////////////////////////////////////////////////////////////////////////
00062 
00063   void runComputation( );
00064  
00065   void writeResults( ostream& );
00066 
00067   void readResults( istream& );
00068 
00069   
00070 private:
00071 
00072   /////////////////////////////////////////////////////////////////////////
00073   //                                                                     //
00074   // Data Members:                                                       //
00075   //                                                                     //
00076   /////////////////////////////////////////////////////////////////////////
00077 
00078   ORProblems* theORProblems;
00079   
00080   bool retValue;
00081 };
00082 
00083 
00084 // ------------------------- ORIsFreeProblem ------------------------------- //
00085 
00086 
00087 class ORIsFreeProblem : public ComputationManager
00088 {
00089 public:
00090 
00091   /////////////////////////////////////////////////////////////////////////
00092   //                                                                     //
00093   // Constructors:                                                       //
00094   //                                                                     //
00095   /////////////////////////////////////////////////////////////////////////
00096 
00097   ORIsFreeProblem( class SMFPGroup& );
00098 
00099   ~ORIsFreeProblem( );
00100 
00101 
00102   /////////////////////////////////////////////////////////////////////////
00103   //                                                                     //
00104   // Front End Interfacing:                                              //
00105   //                                                                     //
00106   /////////////////////////////////////////////////////////////////////////
00107 
00108   void viewStructure( ostream& ) const;  // overrides SMObject
00109 
00110   
00111   /////////////////////////////////////////////////////////////////////////
00112   //                                                                     //
00113   // Control:                                                            //
00114   //                                                                     //
00115   /////////////////////////////////////////////////////////////////////////
00116 
00117   void takeControl( );         // overrides ComputationManager
00118 
00119   /////////////////////////////////////////////////////////////////////////
00120   //                                                                     //
00121   // State Transitions:                                                  //
00122   //                                                                     //
00123   /////////////////////////////////////////////////////////////////////////
00124 
00125   void start( ) { };          // overrides ComputationManager
00126 
00127   void terminate( ) { };      // overrides ComputationManager
00128 
00129 
00130 private:
00131 
00132   /////////////////////////////////////////////////////////////////////////
00133   //                                                                     //
00134   // Data Members:                                                       //
00135   //                                                                     //
00136   /////////////////////////////////////////////////////////////////////////
00137 
00138   const SMFPGroup& theGroup;
00139 
00140   ORProblems* theORProblems;
00141 
00142   ORIsFreeProblemARCer arcer;
00143 };
00144 
00145 
00146 // --------------------------- IsFreeChecker ------------------------------- //
00147 
00148 
00149 class IsFreeChecker
00150 {
00151 
00152 public:
00153 
00154   IsFreeChecker( class SMFPGroup& );
00155 
00156   Trichotomy isFree( );
00157 
00158   Chars getExplanation( ) { return explanation; }
00159 
00160 
00161 private:
00162 
00163   class SMFPGroup& theGroup;
00164 
00165   FPGroup G;
00166 
00167   class GIC& gic;
00168 
00169   class GCM& gcm;
00170 
00171 
00172   // Housekeeping members:
00173 
00174   bool triedAbelianization;
00175 
00176   Chars explanation;
00177 };
00178 
00179 
00180 // -------------------------- IsFreeProblem -------------------------------- //
00181 
00182 
00183 class IsFreeProblem : public Supervisor
00184 {
00185 public:
00186 
00187   /////////////////////////////////////////////////////////////////////////
00188   //                                                                     //
00189   // Constructors:                                                       //
00190   //                                                                     //
00191   /////////////////////////////////////////////////////////////////////////
00192 
00193   IsFreeProblem( class SMFPGroup& );
00194 
00195 
00196   /////////////////////////////////////////////////////////////////////////
00197   //                                                                     //
00198   // Front End Interfacing:                                              //
00199   //                                                                     //
00200   /////////////////////////////////////////////////////////////////////////
00201 
00202   void viewStructure(ostream& ostr) const;  // overrides SMObject
00203 
00204 
00205   /////////////////////////////////////////////////////////////////////////
00206   //                                                                     //
00207   // Control:                                                            //
00208   //                                                                     //
00209   /////////////////////////////////////////////////////////////////////////
00210 
00211   void takeControl( );         // overrides ComputationManager
00212 
00213 
00214   /////////////////////////////////////////////////////////////////////////
00215   //                                                                     //
00216   // State Transitions:                                                  //
00217   //                                                                     //
00218   /////////////////////////////////////////////////////////////////////////
00219 
00220   void start( );              // overrides ComputationManager
00221 
00222   void terminate( );          // overrides ComputationManager
00223 
00224 
00225 private:
00226 
00227   /////////////////////////////////////////////////////////////////////////
00228   //                                                                     //
00229   // Data Members:                                                       //
00230   //                                                                     //
00231   /////////////////////////////////////////////////////////////////////////
00232 
00233   const SMFPGroup& theGroup;
00234 
00235   IsFreeChecker theChecker;
00236 
00237   // GCM components this uses; only for automatic ARC passing:
00238 
00239   MirrorSubordinate abelianInvariants;
00240 };
00241 
00242 #endif

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