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

/magnus/back_end/SMApps/include/HomologyProblem.h

Go to the documentation of this file.
00001 /*
00002  *   $Id: HomologyProblem.h,v 1.3 1999/11/23 20:31:44 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: Definition of class HomologyProblem
00009 //
00010 // Principal Author: Roger Needham
00011 //
00012 // Status: in progress
00013 //
00014 // Revision History:
00015 //
00016 
00017 
00018 #ifndef _HOMOLOGYPROBLEM_H_
00019 #define _HOMOLOGYPROBLEM_H_
00020 
00021 #include "Supervisor.h"
00022 #include "Vector.h"
00023 
00024 //---------------------------------------------------------------------------//
00025 //------------------------- HomologyProblem ---------------------------------//
00026 //---------------------------------------------------------------------------//
00027 
00028 class HomologyARCer : public ARCer
00029 {
00030 public:
00031 
00032   /////////////////////////////////////////////////////////////////////////
00033   //                                                                     //
00034   // Constructors:                                                       //
00035   //                                                                     //
00036   /////////////////////////////////////////////////////////////////////////
00037 
00038   HomologyARCer( ComputationManager& );
00039 
00040   ~HomologyARCer( );
00041 
00042 
00043   /////////////////////////////////////////////////////////////////////////
00044   //                                                                     //
00045   // Accessors:                                                          //
00046   //                                                                     //
00047   /////////////////////////////////////////////////////////////////////////
00048 
00049   void setArguments( const class KBMachine& M, int startDimension, 
00050                      int endDimension );
00051 
00052   VectorOf<Integer> getTorsionInvariants( ) const { return torsionInvariants; }
00053 
00054   int getTorsionFreeRank() const { return torsionFreeRank; }
00055 
00056   // Inherited from ARCer:
00057   // bool takeControl( );
00058 
00059 
00060   /////////////////////////////////////////////////////////////////////////
00061   //                                                                     //
00062   // IPC interaction members:                                            //
00063   //                                                                     //
00064   /////////////////////////////////////////////////////////////////////////
00065 
00066   void runComputation( );
00067 
00068   void writeResults( ostream& );
00069 
00070   void readResults( istream& );
00071 
00072   
00073 private:
00074 
00075   /////////////////////////////////////////////////////////////////////////
00076   //                                                                     //
00077   // Data Members:                                                       //
00078   //                                                                     //
00079   /////////////////////////////////////////////////////////////////////////
00080   
00081   class KBMachine *kbmachine;
00082   int startdim, enddim;
00083   VectorOf<Integer> torsionInvariants;
00084   int torsionFreeRank;
00085 };
00086 
00087 
00088 class HomologyProblem : public ComputationManager
00089 {
00090 public:
00091 
00092   /////////////////////////////////////////////////////////////////////////
00093   //                                                                     //
00094   // Constructors:                                                       //
00095   //                                                                     //
00096   /////////////////////////////////////////////////////////////////////////
00097 
00098   HomologyProblem( const class HomologySupervisor& );
00099    
00100   /////////////////////////////////////////////////////////////////////////
00101   //                                                                     //
00102   // Accessors:                                                          //
00103   //                                                                     //
00104   /////////////////////////////////////////////////////////////////////////
00105 
00106   bool isSolved() const { return solved; }
00107 
00108   /////////////////////////////////////////////////////////////////////////
00109   //                                                                     //
00110   // Front End Interfacing:                                              //
00111   //                                                                     //
00112   /////////////////////////////////////////////////////////////////////////
00113 
00114   /////////////////////////////////////////////////////////////////////////
00115   //                                                                     //
00116   // Control:                                                            //
00117   //                                                                     //
00118   /////////////////////////////////////////////////////////////////////////
00119 
00120   void takeControl( );         // overrides ComputationManager
00121 
00122   /////////////////////////////////////////////////////////////////////////
00123   //                                                                     //
00124   // State Transitions:                                                  //
00125   //                                                                     //
00126   /////////////////////////////////////////////////////////////////////////
00127 
00128   void start( ) { }              // overrides ComputationManager
00129 
00130   void terminate( ) { }          // overrides ComputationManager
00131 
00132   
00133 private:
00134 
00135   /////////////////////////////////////////////////////////////////////////
00136   //                                                                     //
00137   // Data Members:                                                       //
00138   //                                                                     //
00139   /////////////////////////////////////////////////////////////////////////
00140 
00141   SMFPGroup& theGroup;
00142   int theDimension;
00143   HomologyARCer homologyArcer;
00144   bool arcerStarted;
00145   bool solved;
00146 };
00147 
00148 
00149 
00150 
00151 
00152 class HomologySupervisor : public Supervisor
00153 {
00154 public:
00155 
00156   /////////////////////////////////////////////////////////////////////////
00157   //                                                                     //
00158   // Constructors:                                                       //
00159   //                                                                     //
00160   /////////////////////////////////////////////////////////////////////////
00161 
00162   HomologySupervisor(class SMFPGroup& G, int d = 2 );
00163 
00164 /*
00165   HomologySupervisor(class SMFPGroup& G)
00166     : Supervisor(true), theGroup(G), 
00167       homology( *this ), kbSupervisor(*this,*((SubordinateBase*)0))
00168   { }
00169   //@rn Bogus ctor; see `But no' comment in Menu.h.
00170 */
00171   /////////////////////////////////////////////////////////////////////////
00172   //                                                                     //
00173   // Accessors:                                                          //
00174   //                                                                     //
00175   /////////////////////////////////////////////////////////////////////////
00176 
00177   SMFPGroup& group() const { return theGroup; }
00178 
00179   int dimension( ) const { return theDimension; }
00180 
00181   /////////////////////////////////////////////////////////////////////////
00182   //                                                                     //
00183   // Front End Interfacing:                                              //
00184   //                                                                     //
00185   /////////////////////////////////////////////////////////////////////////
00186 
00187   void viewStructure(ostream& ostr) const;  // overrides SMObject
00188 
00189   /////////////////////////////////////////////////////////////////////////
00190   //                                                                     //
00191   // Control:                                                            //
00192   //                                                                     //
00193   /////////////////////////////////////////////////////////////////////////
00194 
00195   void takeControl( );         // overrides ComputationManager
00196 
00197   /////////////////////////////////////////////////////////////////////////
00198   //                                                                     //
00199   // State Transitions:                                                  //
00200   //                                                                     //
00201   /////////////////////////////////////////////////////////////////////////
00202 
00203   void start( ) { }           // overrides ComputationManager
00204 
00205   void terminate( ) { }       // overrides ComputationManager
00206 
00207 
00208 private:
00209 
00210   /////////////////////////////////////////////////////////////////////////
00211   //                                                                     //
00212   // Data Members:                                                       //
00213   //                                                                     //
00214   /////////////////////////////////////////////////////////////////////////
00215 
00216   SMFPGroup& theGroup;
00217   int theDimension;
00218 
00219   Subordinate<HomologySupervisor, HomologyProblem> homology;
00220   MirrorSubordinate kbSupervisor;
00221 };
00222 
00223 #endif
00224 

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