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

/magnus/back_end/SMApps/include/RankOfSubgroup.h

Go to the documentation of this file.
00001 /*
00002  *   $Id: RankOfSubgroup.h,v 1.2 2000/10/07 18:38:01 bormotov Exp $
00003  */
00004  
00005 // Contents: Declaration of classes RankOfSubgroup, RankOfSubgroupProblem, RankOfSubgroupARCer
00006 //
00007 // Principal Author: Alexander Ushakov
00008 //
00009 // Status: in progress
00010 //
00011 // Revision History:
00012 //
00013 
00014 #ifndef _RANKOFSUBGROUP_H_
00015 #define _RANKOFSUBGROUP_H_
00016 
00017 
00018 #include "TurnerProperSubgroupEnumerator.h"
00019 
00020 #include "Supervisor.h"
00021 #include "SMWord.h"
00022 #include "File.h"
00023 
00024 //#include "SGofFreeGroup.h"
00025 //#include "SMSetOfWords.h"
00026 //#include "FreeGroup.h"
00027 
00028 
00029 
00030 // ------------------------  RankOfSubgroupARCer ------------------------------ //
00031 
00032 
00033 
00034 class RankOfSubgroupARCer : public ARCer
00035 {
00036 public:
00037 
00038   /////////////////////////////////////////////////////////////////////////
00039   //                                                                     //
00040   // Constructors:                                                       //
00041   //                                                                     //
00042   /////////////////////////////////////////////////////////////////////////
00043 
00044   RankOfSubgroupARCer( ComputationManager& boss, 
00045                   const class SMFPGroup& group, 
00046                   const SGofFreeGroup& sg );
00047 
00048   ~RankOfSubgroupARCer();
00049 
00050   /////////////////////////////////////////////////////////////////////////
00051   //                                                                     //
00052   // Accessors:                                                          //
00053   //                                                                     //
00054   /////////////////////////////////////////////////////////////////////////
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   Chars getFileName( ) const { return PSE->getFileName(); }
00070 
00071   Trichotomy getAnswer() const { return answer;}
00072 
00073 private:
00074 
00075   /////////////////////////////////////////////////////////////////////////
00076   //                                                                     //
00077   // Data Members:                                                       //
00078   //                                                                     //
00079   /////////////////////////////////////////////////////////////////////////
00080 
00081 
00082   bool isAFreeFactorIn( SGofFreeGroup& g ) const;
00083 
00084   const class SMFPGroup& theGroup;
00085   // given free group
00086   const SGofFreeGroup theSubgroup;
00087   // given subgroup
00088 
00089   ProperSubgroupEnumerator* PSE;
00090   // Subgroup enumerator 
00091 
00092   Trichotomy answer;
00093 
00094   void lookingup();
00095   // enumerate subgroup
00096   void printSG( ostream& file, const SGofFreeGroup& subgroup );
00097 };
00098 
00099 
00100 // ------------------------  RankOfSubgroup ------------------------------ //
00101 
00102 
00103 class RankOfSubgroup : public ComputationManager
00104 {
00105 public:
00106 
00107   /////////////////////////////////////////////////////////////////////////
00108   //                                                                     //
00109   // Constructors:                                                       //
00110   //                                                                     //
00111   /////////////////////////////////////////////////////////////////////////
00112 
00113   RankOfSubgroup(class RankOfSubgroupProblem& problemObject );
00114 
00115   ~RankOfSubgroup( );
00116 
00117   /////////////////////////////////////////////////////////////////////////
00118   //                                                                     //
00119   // Accessors:                                                          //
00120   //                                                                     //
00121   /////////////////////////////////////////////////////////////////////////
00122 
00123   Trichotomy getAnswer() const { 
00124        return theARCer.getAnswer();
00125   }
00126 
00127   Chars getFileName( ) { return theARCer.getFileName(); }
00128   // Returns name of the file with computation details
00129 
00130 
00131   /////////////////////////////////////////////////////////////////////////
00132   //                                                                     //
00133   // Control:                                                            //
00134   //                                                                     //
00135   /////////////////////////////////////////////////////////////////////////
00136 
00137   void takeControl( );         // overrides ComputationManager
00138 
00139   /////////////////////////////////////////////////////////////////////////
00140   //                                                                     //
00141   // State Transitions:                                                  //
00142   //                                                                     //
00143   /////////////////////////////////////////////////////////////////////////
00144 
00145   void start( ) { };              // overrides ComputationManager
00146 
00147   void terminate( ) { };          // overrides ComputationManager
00148 
00149 
00150 private:
00151 
00152   /////////////////////////////////////////////////////////////////////////
00153   //                                                                     //
00154   // Data Members:                                                       //
00155   //                                                                     //
00156   /////////////////////////////////////////////////////////////////////////
00157 
00158   const class SMSubgroup& theSubgroup;
00159 
00160   FreeGroup theGroup;
00161 
00162   RankOfSubgroupARCer theARCer;
00163 
00164 };
00165 
00166 
00167 // -------------------- RankOfSubgroupProblem --------------------------- //
00168 
00169 
00170 class RankOfSubgroupProblem : public Supervisor
00171 {
00172 public:
00173 
00174   /////////////////////////////////////////////////////////////////////////
00175   //                                                                     //
00176   // Constructors:                                                       //
00177   //                                                                     //
00178   /////////////////////////////////////////////////////////////////////////
00179 
00180   RankOfSubgroupProblem(const class SMSubgroup& sg);
00181 
00182 
00183   /////////////////////////////////////////////////////////////////////////
00184   //                                                                     //
00185   // Accessors:                                                          //
00186   //                                                                     //
00187   /////////////////////////////////////////////////////////////////////////
00188 
00189   const class SMSubgroup& getSubgroup( ) const;
00190 
00191 
00192   /////////////////////////////////////////////////////////////////////////
00193   //                                                                     //
00194   // Front End Interfacing:                                              //
00195   //                                                                     //
00196   /////////////////////////////////////////////////////////////////////////
00197 
00198   void viewStructure(ostream& ostr) const;  // overrides SMObject
00199 
00200 
00201   /////////////////////////////////////////////////////////////////////////
00202   //                                                                     //
00203   // Control:                                                            //
00204   //                                                                     //
00205   /////////////////////////////////////////////////////////////////////////
00206 
00207   void takeControl( );         // overrides ComputationManager
00208 
00209 
00210   /////////////////////////////////////////////////////////////////////////
00211   //                                                                     //
00212   // State Transitions:                                                  //
00213   //                                                                     //
00214   /////////////////////////////////////////////////////////////////////////
00215 
00216   void start( ) { };          // overrides ComputationManager
00217 
00218   void terminate( ) { };      // overrides ComputationManager
00219 
00220 
00221 private:
00222 
00223   /////////////////////////////////////////////////////////////////////////
00224   //                                                                     //
00225   // Data Members:                                                       //
00226   //                                                                     //
00227   /////////////////////////////////////////////////////////////////////////
00228 
00229   const SMSubgroup& theSubgroup;
00230  
00231   bool linkHasBeenSent;
00232   
00233 
00234   /////////////////////////////////////////////////////////////////////////
00235   //                                                                     //
00236   // Subordinate Computation Managers:                                   //
00237   //                                                                     //
00238   /////////////////////////////////////////////////////////////////////////
00239 
00240   Subordinate<RankOfSubgroupProblem, RankOfSubgroup> rankOfSubgroup;
00241  
00242 };
00243 
00244 
00245 
00246 #endif
00247 

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