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

/magnus/back_end/SMApps/include/FreeProblems.h

Go to the documentation of this file.
00001 /*
00002  *   $Id: 
00003  */
00004  
00005 // Copyright (C) 1995 The New York Group Theory Cooperative
00006 // See magnus/doc/COPYRIGHT for the full notice.
00007 //
00008 // Contents: Declarations of classes AutEnumerator, FiniteAutEnumerator
00009 //
00010 // Principal Author: Roger Needham, Alexei Myasnikov
00011 //
00012 // Status: in progress
00013 //
00014 // Revision History:
00015 //
00016 // * 7/96 Dmitry B. made porting to gcc 2.7.2.
00017 //
00018 
00019 
00020 #ifndef _FREE_PROBLEMS_H_
00021 #define _FREE_PROBLEMS_H_
00022 
00023 
00024 #include "ComputationManager.h"
00025 #include "Supervisor.h"
00026 #include "RandomAutoInFree.h"
00027 #include "SGofFreeGroup.h"
00028 #include "File.h"
00029 
00030 // ---------------------- AutoInFreeIsFinitARCer --------------------------- //
00031 
00032 class AutoInFreeIsFinitARCer : public ARCer
00033 {
00034 public:
00035 
00036   /////////////////////////////////////////////////////////////////////////
00037   //                                                                     //
00038   // Constructors:                                                       //
00039   //                                                                     //
00040   /////////////////////////////////////////////////////////////////////////
00041 
00042   AutoInFreeIsFinitARCer( ComputationManager& boss ) 
00043     : ARCer( boss ),theMap( 0 ),retValue(dontknow) { } 
00044   
00045   ~AutoInFreeIsFinitARCer( ) { delete theMap; }
00046 
00047   /////////////////////////////////////////////////////////////////////////
00048   //                                                                     //
00049   // Accessors:                                                          //
00050   //                                                                     //
00051   /////////////////////////////////////////////////////////////////////////
00052 
00053  void setArguments( const Map& map,const FreeGroup& group );
00054 
00055  Trichotomy getRetValue() const { return retValue;}
00056  int getOrder() const { return theOrder;}
00057 
00058   // Inherited from ARCer:
00059   // bool takeControl( );
00060 
00061 
00062   /////////////////////////////////////////////////////////////////////////
00063   //                                                                     //
00064   // IPC interaction members:                                            //
00065   //                                                                     //
00066   /////////////////////////////////////////////////////////////////////////
00067 
00068   void runComputation( );
00069  
00070   void writeResults( ostream& );
00071 
00072   void readResults( istream& );
00073 
00074   
00075 private:
00076 
00077   /////////////////////////////////////////////////////////////////////////
00078   //                                                                     //
00079   // Data Members:                                                       //
00080   //                                                                     //
00081   /////////////////////////////////////////////////////////////////////////
00082 
00083   FreeGroup theGroup;
00084   Map* theMap;
00085   
00086   Trichotomy retValue;
00087   int theOrder;
00088 };
00089 
00090 //---------------------------------------------------------------------------//
00091 //-------------------- AutoInFreeIsFinite  -----------------------------------//
00092 //---------------------------------------------------------------------------//
00093 
00094 
00095 class AutoInFreeIsFinite : public Supervisor
00096 {
00097 public:
00098 
00099   /////////////////////////////////////////////////////////////////////////
00100   //                                                                     //
00101   // Constructors:                                                       //
00102   //                                                                     //
00103   /////////////////////////////////////////////////////////////////////////
00104 
00105   AutoInFreeIsFinite(const class SMMap& hom);
00106 
00107   /////////////////////////////////////////////////////////////////////////
00108   //                                                                     //
00109   // Accessors:                                                          //
00110   //                                                                     //
00111   /////////////////////////////////////////////////////////////////////////
00112 
00113 
00114   /////////////////////////////////////////////////////////////////////////
00115   //                                                                     //
00116   // Front End Interfacing:                                              //
00117   //                                                                     //
00118   /////////////////////////////////////////////////////////////////////////
00119 
00120   void viewStructure(ostream& ostr) const;  // overrides SMObject
00121 
00122   /////////////////////////////////////////////////////////////////////////
00123   //                                                                     //
00124   // Control:                                                            //
00125   //                                                                     //
00126   /////////////////////////////////////////////////////////////////////////
00127 
00128   void takeControl( );         // overrides ComputationManager
00129 
00130   /////////////////////////////////////////////////////////////////////////
00131   //                                                                     //
00132   // State Transitions:                                                  //
00133   //                                                                     //
00134   /////////////////////////////////////////////////////////////////////////
00135 
00136   void start( );              // overrides ComputationManager
00137 
00138   void terminate( );          // overrides ComputationManager
00139 
00140 
00141 private:
00142 
00143   /////////////////////////////////////////////////////////////////////////
00144   //                                                                     //
00145   // Data Members:                                                       //
00146   //                                                                     //
00147   /////////////////////////////////////////////////////////////////////////
00148 
00149   const class SMMap& theHom;
00150 
00151   AutoInFreeIsFinitARCer arcer;
00152 
00153 };
00154 
00155 // ---------------------- SGOfFreeContainsConjugateARCer --------------------------- //
00156 
00157 class SGOfFreeContainsConjugateARCer : public ARCer
00158 {
00159 public:
00160 
00161   /////////////////////////////////////////////////////////////////////////
00162   //                                                                     //
00163   // Constructors:                                                       //
00164   //                                                                     //
00165   /////////////////////////////////////////////////////////////////////////
00166 
00167   SGOfFreeContainsConjugateARCer( ComputationManager& boss ) 
00168     : ARCer( boss ),theSubgroup( 0 ) { } 
00169   
00170   ~SGOfFreeContainsConjugateARCer( ) { delete theSubgroup; }
00171 
00172   /////////////////////////////////////////////////////////////////////////
00173   //                                                                     //
00174   // Accessors:                                                          //
00175   //                                                                     //
00176   /////////////////////////////////////////////////////////////////////////
00177 
00178  void setArguments( const SGofFreeGroup& subgroup, const VectorOf<Word>& gens );
00179 
00180   bool getRetValue(Word& c) const{ 
00181     if (retValue)
00182       c = conjugator;
00183     return retValue; 
00184   }
00185 
00186   // Inherited from ARCer:
00187   // bool takeControl( );
00188 
00189 
00190   /////////////////////////////////////////////////////////////////////////
00191   //                                                                     //
00192   // IPC interaction members:                                            //
00193   //                                                                     //
00194   /////////////////////////////////////////////////////////////////////////
00195 
00196   void runComputation( );
00197  
00198   void writeResults( ostream& );
00199 
00200   void readResults( istream& );
00201 
00202   
00203 private:
00204 
00205   /////////////////////////////////////////////////////////////////////////
00206   //                                                                     //
00207   // Data Members:                                                       //
00208   //                                                                     //
00209   /////////////////////////////////////////////////////////////////////////
00210 
00211   SGofFreeGroup* theSubgroup;
00212   
00213   bool retValue;
00214   Word conjugator;
00215   SetOf<Word> generators;
00216 };
00217 //---------------------------------------------------------------------------//
00218 //-------------------- SGOfFreeContainsConjugate -- -------------------------//
00219 //---------------------------------------------------------------------------//
00220 
00221 
00222 class SGOfFreeContainsConjugate : public Supervisor
00223 {
00224 public:
00225 
00226   /////////////////////////////////////////////////////////////////////////
00227   //                                                                     //
00228   // Constructors:                                                       //
00229   //                                                                     //
00230   /////////////////////////////////////////////////////////////////////////
00231 
00232   SGOfFreeContainsConjugate(const class SMSubgroup& S1, const class SMSubgroup& S2);
00233 
00234   /////////////////////////////////////////////////////////////////////////
00235   //                                                                     //
00236   // Accessors:                                                          //
00237   //                                                                     //
00238   /////////////////////////////////////////////////////////////////////////
00239 
00240 
00241   /////////////////////////////////////////////////////////////////////////
00242   //                                                                     //
00243   // Front End Interfacing:                                              //
00244   //                                                                     //
00245   /////////////////////////////////////////////////////////////////////////
00246 
00247   void viewStructure(ostream& ostr) const;  // overrides SMObject
00248 
00249   /////////////////////////////////////////////////////////////////////////
00250   //                                                                     //
00251   // Control:                                                            //
00252   //                                                                     //
00253   /////////////////////////////////////////////////////////////////////////
00254 
00255   void takeControl( );         // overrides ComputationManager
00256 
00257   /////////////////////////////////////////////////////////////////////////
00258   //                                                                     //
00259   // State Transitions:                                                  //
00260   //                                                                     //
00261   /////////////////////////////////////////////////////////////////////////
00262 
00263   void start( );              // overrides ComputationManager
00264 
00265   void terminate( );          // overrides ComputationManager
00266 
00267 
00268 private:
00269 
00270   /////////////////////////////////////////////////////////////////////////
00271   //                                                                     //
00272   // Data Members:                                                       //
00273   //                                                                     //
00274   /////////////////////////////////////////////////////////////////////////
00275 
00276   const class SMSubgroup& subgroup1;
00277   const class SMSubgroup& subgroup2;
00278 
00279   SGOfFreeContainsConjugateARCer arcer;
00280 
00281 };
00282 
00283 
00284 // ---------------------- SGOfFreeConjugateToARCer --------------------------- //
00285 
00286 class SGOfFreeConjugateToARCer : public ARCer
00287 {
00288 public:
00289 
00290   /////////////////////////////////////////////////////////////////////////
00291   //                                                                     //
00292   // Constructors:                                                       //
00293   //                                                                     //
00294   /////////////////////////////////////////////////////////////////////////
00295 
00296   SGOfFreeConjugateToARCer( ComputationManager& boss ) 
00297     : ARCer( boss ),theSubgroup( 0 ) { } 
00298   
00299   ~SGOfFreeConjugateToARCer( ) { delete theSubgroup; }
00300 
00301   /////////////////////////////////////////////////////////////////////////
00302   //                                                                     //
00303   // Accessors:                                                          //
00304   //                                                                     //
00305   /////////////////////////////////////////////////////////////////////////
00306 
00307  void setArguments( const SGofFreeGroup& subgroup, const VectorOf<Word>& gens );
00308 
00309   bool getRetValue( ) const{ 
00310     return retValue; 
00311   }
00312 
00313   // Inherited from ARCer:
00314   // bool takeControl( );
00315 
00316 
00317   /////////////////////////////////////////////////////////////////////////
00318   //                                                                     //
00319   // IPC interaction members:                                            //
00320   //                                                                     //
00321   /////////////////////////////////////////////////////////////////////////
00322 
00323   void runComputation( );
00324  
00325   void writeResults( ostream& );
00326 
00327   void readResults( istream& );
00328 
00329   
00330 private:
00331 
00332   /////////////////////////////////////////////////////////////////////////
00333   //                                                                     //
00334   // Data Members:                                                       //
00335   //                                                                     //
00336   /////////////////////////////////////////////////////////////////////////
00337 
00338   SGofFreeGroup* theSubgroup;
00339   
00340   bool retValue;
00341   SetOf<Word> generators;
00342 };
00343 //---------------------------------------------------------------------------//
00344 //-------------------- SGOfFreeConjugateTo ----------------------------------//
00345 //---------------------------------------------------------------------------//
00346 
00347 
00348 class SGOfFreeConjugateTo : public Supervisor
00349 {
00350 public:
00351 
00352   /////////////////////////////////////////////////////////////////////////
00353   //                                                                     //
00354   // Constructors:                                                       //
00355   //                                                                     //
00356   /////////////////////////////////////////////////////////////////////////
00357 
00358   SGOfFreeConjugateTo(const class SMSubgroup& S1, const class SMSubgroup& S2);
00359 
00360   /////////////////////////////////////////////////////////////////////////
00361   //                                                                     //
00362   // Accessors:                                                          //
00363   //                                                                     //
00364   /////////////////////////////////////////////////////////////////////////
00365 
00366 
00367   /////////////////////////////////////////////////////////////////////////
00368   //                                                                     //
00369   // Front End Interfacing:                                              //
00370   //                                                                     //
00371   /////////////////////////////////////////////////////////////////////////
00372 
00373   void viewStructure(ostream& ostr) const;  // overrides SMObject
00374 
00375   /////////////////////////////////////////////////////////////////////////
00376   //                                                                     //
00377   // Control:                                                            //
00378   //                                                                     //
00379   /////////////////////////////////////////////////////////////////////////
00380 
00381   void takeControl( );         // overrides ComputationManager
00382 
00383   /////////////////////////////////////////////////////////////////////////
00384   //                                                                     //
00385   // State Transitions:                                                  //
00386   //                                                                     //
00387   /////////////////////////////////////////////////////////////////////////
00388 
00389   void start( );              // overrides ComputationManager
00390 
00391   void terminate( );          // overrides ComputationManager
00392 
00393 
00394 private:
00395 
00396   /////////////////////////////////////////////////////////////////////////
00397   //                                                                     //
00398   // Data Members:                                                       //
00399   //                                                                     //
00400   /////////////////////////////////////////////////////////////////////////
00401 
00402   const class SMSubgroup& subgroup1;
00403   const class SMSubgroup& subgroup2;
00404 
00405   SGOfFreeConjugateToARCer arcer;
00406 
00407 };
00408 
00409 // ---------------------- AutEnumeratorARCer --------------------------- //
00410 
00411 
00412 class AutEnumeratorARCer : public ARCer
00413 {
00414 public:
00415 
00416   /////////////////////////////////////////////////////////////////////////
00417   //                                                                     //
00418   // Constructors:                                                       //
00419   //                                                                     //
00420   /////////////////////////////////////////////////////////////////////////
00421 
00422   AutEnumeratorARCer( ComputationManager& boss ) 
00423     : ARCer( boss ), randAuto( 0 ), isFinite(0) { } 
00424 
00425   ~AutEnumeratorARCer( ) { delete randAuto; file << end;} 
00426 
00427 
00428   /////////////////////////////////////////////////////////////////////////
00429   //                                                                     //
00430   // Accessors:                                                          //
00431   //                                                                     //
00432   /////////////////////////////////////////////////////////////////////////
00433 
00434   void setArguments( const FreeGroup& group,int avgNumbers, bool isfinite);
00435 
00436   // Inherited from ARCer:
00437   // bool takeControl( );
00438 
00439   Chars getFileName();
00440   
00441   
00442   /////////////////////////////////////////////////////////////////////////
00443   //                                                                     //
00444   // IPC interaction members:                                            //
00445   //                                                                     //
00446   /////////////////////////////////////////////////////////////////////////
00447 
00448   void runComputation( );
00449  
00450   void writeResults( ostream& );
00451 
00452   void readResults( istream& );
00453 
00454 
00455 private:
00456 
00457   /////////////////////////////////////////////////////////////////////////
00458   //                                                                     //
00459   // Data Members:                                                       //
00460   //                                                                     //
00461   /////////////////////////////////////////////////////////////////////////
00462 
00463   RandomAutoInFree* randAuto;
00464   bool isFinite;
00465   File file;
00466 };
00467 
00468 //---------------------------------------------------------------------------//
00469 //--------------------------- AutEnumerator ---------------------------------//
00470 //---------------------------------------------------------------------------//
00471 
00472 
00473 class AutEnumerator : public ComputationManager
00474 {
00475 public:
00476 
00477   /////////////////////////////////////////////////////////////////////////
00478   //                                                                     //
00479   // Constructors:                                                       //
00480   //                                                                     //
00481   /////////////////////////////////////////////////////////////////////////
00482 
00483   AutEnumerator(class SMFPGroup& F, int avgNumGens = 1, bool is_finite = false);
00484 
00485   /*  AutEnumerator(class SMFPGroup& F)
00486     : ComputationManager( true ), theGroup( F ), numGensPicker(0),
00487                 typeGenPicker(0)
00488   { }
00489   //@rn Bogus ctor; see `But no' comment in Menu.h.
00490   */
00491   ~AutEnumerator( );
00492 
00493   /////////////////////////////////////////////////////////////////////////
00494   //                                                                     //
00495   // Accessors:                                                          //
00496   //                                                                     //
00497   /////////////////////////////////////////////////////////////////////////
00498 
00499 
00500   /////////////////////////////////////////////////////////////////////////
00501   //                                                                     //
00502   // Front End Interfacing:                                              //
00503   //                                                                     //
00504   /////////////////////////////////////////////////////////////////////////
00505 
00506   const IconID iconID( ) const;             // overrides ComputationManager
00507 
00508   void viewStructure(ostream& ostr) const;  // overrides SMObject
00509 
00510   /////////////////////////////////////////////////////////////////////////
00511   //                                                                     //
00512   // Control:                                                            //
00513   //                                                                     //
00514   /////////////////////////////////////////////////////////////////////////
00515 
00516   void takeControl( );         // overrides ComputationManager
00517 
00518   /////////////////////////////////////////////////////////////////////////
00519   //                                                                     //
00520   // State Transitions:                                                  //
00521   //                                                                     //
00522   /////////////////////////////////////////////////////////////////////////
00523 
00524   void start( );              // overrides ComputationManager
00525 
00526   void terminate( );          // overrides ComputationManager
00527 
00528 
00529 private:
00530 
00531   /////////////////////////////////////////////////////////////////////////
00532   //                                                                     //
00533   // Data Members:                                                       //
00534   //                                                                     //
00535   /////////////////////////////////////////////////////////////////////////
00536 
00537   class SMFPGroup& theGroup;
00538 
00539   AutEnumeratorARCer arcer;
00540   int avgNumGens;
00541 
00542   bool isFinite;
00543   bool isStarted;
00544 };
00545 
00546 #endif

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