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

/magnus/back_end/SMApps/include/GAEquations.h

Go to the documentation of this file.
00001 /*
00002  *   $Id: GAEquations.h,v 1.3 1999/11/23 20:31:43 bormotov Exp $
00003  */
00004  
00005 // Copyright (C) 1997 The New York Group Theory Cooperative
00006 // See magnus/doc/COPYRIGHT for the full notice.
00007 //
00008 // Contents: Declarations of classes 
00009 //           GAEquationArcer, GAEquationCM, GAEquationProblem,
00010 //           TwoCommArcer, TwoCommCM, TwoCommProblem
00011 //
00012 // Principal Author: Dmitry Bormotov
00013 //
00014 // Status: in progress
00015 //
00016 // Revision History:
00017 //
00018 
00019 
00020 #ifndef _GAEquations_h_
00021 #define _GAEquations_h_
00022 
00023 
00024 #include "Supervisor.h"
00025 #include "GAEquationSolver.h"
00026 #include "List.h"
00027 #include "ARCer.h"
00028 #include "FPGroup.h"
00029 #include "Map.h"
00030 #include "File.h"
00031 #include "SMEquation.h"
00032 
00033 
00034 // --------------------------- GAEquationArcer ----------------------------- //
00035 
00036 
00037 class GAEquationArcer : public ARCer
00038 {
00039 public:
00040 
00041   /////////////////////////////////////////////////////////////////////////
00042   //                                                                     //
00043   // Constructors:                                                       //
00044   //                                                                     //
00045   /////////////////////////////////////////////////////////////////////////
00046 
00047   GAEquationArcer( ComputationManager& boss ) 
00048     : ARCer( boss ), retValue(dontknow) 
00049   { } 
00050 
00051 
00052   /////////////////////////////////////////////////////////////////////////
00053   //                                                                     //
00054   // Accessors:                                                          //
00055   //                                                                     //
00056   /////////////////////////////////////////////////////////////////////////
00057 
00058   void setArguments( FreeGroup, int, Word );
00059 
00060   // Inherited from ARCer:
00061   // bool takeControl( );
00062 
00063   Trichotomy haveSolution() const { return retValue; }
00064 
00065   Map getSolution( ) const;
00066 
00067   Chars getFileName() const { return file.getFileName(); }
00068 
00069 
00070   /////////////////////////////////////////////////////////////////////////
00071   //                                                                     //
00072   // IPC interaction members:                                            //
00073   //                                                                     //
00074   /////////////////////////////////////////////////////////////////////////
00075 
00076   void runComputation( );
00077  
00078   void writeResults( ostream& );
00079 
00080   void readResults( istream& );
00081 
00082   
00083 private:
00084 
00085   /////////////////////////////////////////////////////////////////////////
00086   //                                                                     //
00087   // Data Members:                                                       //
00088   //                                                                     //
00089   /////////////////////////////////////////////////////////////////////////
00090 
00091   Trichotomy retValue;
00092   Map solution;
00093   File file;
00094   FreeGroup theGroup;
00095   int numOfVars;
00096   Word theWord;
00097 };
00098 
00099 
00100 // ----------------------------- GAEquationCM ------------------------------ //
00101 
00102 
00103 class GAEquationCM : public ComputationManager
00104 {
00105 public:
00106 
00107   /////////////////////////////////////////////////////////////////////////
00108   //                                                                     //
00109   // Constructors:                                                       //
00110   //                                                                     //
00111   /////////////////////////////////////////////////////////////////////////
00112 
00113   GAEquationCM( class GAEquationProblem& PO );
00114 
00115   
00116   /////////////////////////////////////////////////////////////////////////
00117   //                                                                     //
00118   // Accessors:                                                          //
00119   //                                                                     //
00120   /////////////////////////////////////////////////////////////////////////
00121 
00122   Chars getFileName() const { return arcer.getFileName(); }
00123 
00124   Trichotomy haveSolution() const { return theAnswer; }
00125 
00126   Map getSolution( ) const;
00127 
00128 
00129   /////////////////////////////////////////////////////////////////////////
00130   //                                                                     //
00131   // Front End Interfacing:                                              //
00132   //                                                                     //
00133   /////////////////////////////////////////////////////////////////////////
00134 
00135   void viewStructure(ostream& ostr) const { }  // overrides SMObject
00136 
00137   
00138   /////////////////////////////////////////////////////////////////////////
00139   //                                                                     //
00140   // Control:                                                            //
00141   //                                                                     //
00142   /////////////////////////////////////////////////////////////////////////
00143 
00144   void takeControl( );         // overrides ComputationManager
00145 
00146   
00147   /////////////////////////////////////////////////////////////////////////
00148   //                                                                     //
00149   // State Transitions:                                                  //
00150   //                                                                     //
00151   /////////////////////////////////////////////////////////////////////////
00152 
00153   void start( );              // overrides ComputationManager
00154 
00155   void terminate( ) { }       // overrides ComputationManager
00156 
00157 
00158 private:
00159 
00160   /////////////////////////////////////////////////////////////////////////
00161   //                                                                     //
00162   // Data Members:                                                       //
00163   //                                                                     //
00164   /////////////////////////////////////////////////////////////////////////
00165 
00166   SMEquation2& theEquation;
00167   GAEquationArcer arcer;
00168   Trichotomy theAnswer;
00169   Map solution;
00170   Chars filename;
00171   bool bStarted;
00172 };
00173 
00174 
00175 // ------------------------- GAEquationProblem ----------------------------- //
00176 
00177 
00178 class GAEquationProblem : public Supervisor
00179 {
00180 public:
00181 
00182   /////////////////////////////////////////////////////////////////////////
00183   //                                                                     //
00184   // Constructors:                                                       //
00185   //                                                                     //
00186   /////////////////////////////////////////////////////////////////////////
00187 
00188   GAEquationProblem( class SMEquation2& );
00189  
00190 
00191   /////////////////////////////////////////////////////////////////////////
00192   //                                                                     //
00193   // Accessors:                                                          //
00194   //                                                                     //
00195   /////////////////////////////////////////////////////////////////////////
00196 
00197   SMEquation2& getEquation() const { return theEquation; }
00198 
00199  
00200   /////////////////////////////////////////////////////////////////////////
00201   //                                                                     //
00202   // Front End Interfacing:                                              //
00203   //                                                                     //
00204   /////////////////////////////////////////////////////////////////////////
00205 
00206   void viewStructure(ostream& ostr) const;  // overrides SMObject
00207 
00208   /////////////////////////////////////////////////////////////////////////
00209   //                                                                     //
00210   // Control:                                                            //
00211   //                                                                     //
00212   /////////////////////////////////////////////////////////////////////////
00213 
00214   void takeControl( );         // overrides ComputationManager
00215 
00216 
00217 private:
00218 
00219   /////////////////////////////////////////////////////////////////////////
00220   //                                                                     //
00221   // Data Members:                                                       //
00222   //                                                                     //
00223   /////////////////////////////////////////////////////////////////////////
00224 
00225   SMEquation2& theEquation;
00226   bool linkHasBeenSent;
00227 
00228   Subordinate<GAEquationProblem, GAEquationCM> GA;
00229 };
00230 
00231 
00232 // ---------------------------- TwoCommArcer ------------------------------- //
00233 
00234 
00235 class TwoCommArcer : public ARCer
00236 {
00237 public:
00238 
00239   /////////////////////////////////////////////////////////////////////////
00240   //                                                                     //
00241   // Constructors:                                                       //
00242   //                                                                     //
00243   /////////////////////////////////////////////////////////////////////////
00244 
00245   TwoCommArcer( ComputationManager& boss ) 
00246     : ARCer( boss ), retValue(dontknow) 
00247   { } 
00248 
00249 
00250   /////////////////////////////////////////////////////////////////////////
00251   //                                                                     //
00252   // Accessors:                                                          //
00253   //                                                                     //
00254   /////////////////////////////////////////////////////////////////////////
00255 
00256   void setArguments( FreeGroup, Word );
00257 
00258   // Inherited from ARCer:
00259   // bool takeControl( );
00260 
00261   Trichotomy haveSolution() const { return retValue; }
00262 
00263   Chars getFileName() const { return file.getFileName(); }
00264 
00265 
00266   /////////////////////////////////////////////////////////////////////////
00267   //                                                                     //
00268   // IPC interaction members:                                            //
00269   //                                                                     //
00270   /////////////////////////////////////////////////////////////////////////
00271 
00272   void runComputation( );
00273  
00274   void writeResults( ostream& );
00275 
00276   void readResults( istream& );
00277 
00278   
00279 private:
00280 
00281   /////////////////////////////////////////////////////////////////////////
00282   //                                                                     //
00283   // Data Members:                                                       //
00284   //                                                                     //
00285   /////////////////////////////////////////////////////////////////////////
00286 
00287   Trichotomy retValue;
00288   File file;
00289   FreeGroup theGroup;
00290   Word theWord;
00291 };
00292 
00293 
00294 // ----------------------------- TwoCommCM --------------------------------- //
00295 
00296 
00297 class TwoCommCM : public ComputationManager
00298 {
00299 public:
00300 
00301   /////////////////////////////////////////////////////////////////////////
00302   //                                                                     //
00303   // Constructors:                                                       //
00304   //                                                                     //
00305   /////////////////////////////////////////////////////////////////////////
00306 
00307   TwoCommCM( class TwoCommProblem& PO );
00308 
00309   
00310   /////////////////////////////////////////////////////////////////////////
00311   //                                                                     //
00312   // Accessors:                                                          //
00313   //                                                                     //
00314   /////////////////////////////////////////////////////////////////////////
00315 
00316   Chars getFileName() const { return arcer.getFileName(); }
00317 
00318   Trichotomy haveSolution() const { return theAnswer; }
00319 
00320 
00321   /////////////////////////////////////////////////////////////////////////
00322   //                                                                     //
00323   // Front End Interfacing:                                              //
00324   //                                                                     //
00325   /////////////////////////////////////////////////////////////////////////
00326 
00327   void viewStructure(ostream& ostr) const { }  // overrides SMObject
00328 
00329   
00330   /////////////////////////////////////////////////////////////////////////
00331   //                                                                     //
00332   // Control:                                                            //
00333   //                                                                     //
00334   /////////////////////////////////////////////////////////////////////////
00335 
00336   void takeControl( );         // overrides ComputationManager
00337 
00338   
00339   /////////////////////////////////////////////////////////////////////////
00340   //                                                                     //
00341   // State Transitions:                                                  //
00342   //                                                                     //
00343   /////////////////////////////////////////////////////////////////////////
00344 
00345   void start( );              // overrides ComputationManager
00346 
00347   void terminate( ) { }       // overrides ComputationManager
00348 
00349 
00350 private:
00351 
00352   /////////////////////////////////////////////////////////////////////////
00353   //                                                                     //
00354   // Data Members:                                                       //
00355   //                                                                     //
00356   /////////////////////////////////////////////////////////////////////////
00357 
00358   SMWord& theWord;
00359   TwoCommArcer arcer;
00360   Trichotomy theAnswer;
00361   bool bStarted;
00362 };
00363 
00364 
00365 // -------------------------- TwoCommProblem ------------------------------- //
00366 
00367 
00368 class TwoCommProblem : public Supervisor
00369 {
00370 public:
00371 
00372   /////////////////////////////////////////////////////////////////////////
00373   //                                                                     //
00374   // Constructors:                                                       //
00375   //                                                                     //
00376   /////////////////////////////////////////////////////////////////////////
00377 
00378   TwoCommProblem( class SMWord& );
00379  
00380 
00381   /////////////////////////////////////////////////////////////////////////
00382   //                                                                     //
00383   // Accessors:                                                          //
00384   //                                                                     //
00385   /////////////////////////////////////////////////////////////////////////
00386 
00387   SMWord& getWord() const { return theWord; }
00388 
00389  
00390   /////////////////////////////////////////////////////////////////////////
00391   //                                                                     //
00392   // Front End Interfacing:                                              //
00393   //                                                                     //
00394   /////////////////////////////////////////////////////////////////////////
00395 
00396   void viewStructure(ostream& ostr) const;  // overrides SMObject
00397 
00398   /////////////////////////////////////////////////////////////////////////
00399   //                                                                     //
00400   // Control:                                                            //
00401   //                                                                     //
00402   /////////////////////////////////////////////////////////////////////////
00403 
00404   void takeControl( );         // overrides ComputationManager
00405 
00406 
00407 private:
00408 
00409   /////////////////////////////////////////////////////////////////////////
00410   //                                                                     //
00411   // Data Members:                                                       //
00412   //                                                                     //
00413   /////////////////////////////////////////////////////////////////////////
00414 
00415   SMWord& theWord;
00416   bool linkHasBeenSent;
00417 
00418   Subordinate<TwoCommProblem, TwoCommCM> GA;
00419 };
00420 
00421 #endif
00422 
00423 

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