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

/magnus/back_end/Enumerators/include/SubgroupEnumerator.h

Go to the documentation of this file.
00001 #include "Supervisor.h"
00002 #include "SMEnumerator.h"
00003 #include "SMList.h"
00004 #include "Subgroup.h"
00005 #include "SMFPGroup.h"
00006 #include "OutMessages.h"
00007 #include "RandomNumbers.h"
00008 #include "SMListIterator.h" 
00009 
00010 #ifndef _SubgroupEnumerator_H_
00011 #define _SubgroupEnumerator_H_
00012 
00013 // ------------------ SGEnumeratorARCer ---------------------- //
00014 
00015 
00016 class SGEnumeratorARCer : public EnumeratorARCer
00017 {
00018 public:
00019 
00020   /////////////////////////////////////////////////////////////////////////
00021   //                                                                     //
00022   // Constructors:                                                       //
00023   //                                                                     //
00024   /////////////////////////////////////////////////////////////////////////
00025 
00026   SGEnumeratorARCer( ComputationManager& boss,SMListData& d,
00027                      const FreeGroup& group ) 
00028     : EnumeratorARCer( boss, d ), 
00029     theGroup(group),
00030     numberOfAll(100),
00031     enumerateAll( true ),
00032     isNormalRandom( false ),
00033     numberOfGenerators(1),
00034     maxLength(100),
00035     counter(0) { } 
00036   
00037  
00038   /////////////////////////////////////////////////////////////////////////
00039   //                                                                     //
00040   // Accessors:                                                          //
00041   //                                                                     //
00042   /////////////////////////////////////////////////////////////////////////
00043 
00044   // Inherited from ARCer:
00045   // bool takeControl( );
00046   // Inherited from EnumeratorARCer:
00047   // void runComputation( );
00048   
00049   void setEnumerateAll() { enumerateAll = true; }
00050   void setEnumerateRandom() { enumerateAll = false; }
00051   void setNormalRandom() { isNormalRandom = true; }
00052   void setUniformRandom() { isNormalRandom = false; }
00053  
00054   void setTotalNumber(int n) { numberOfAll = n; }
00055   void setMaxLength(int n) { maxLength = n; }
00056   void setNumberOfGens( int n) { numberOfGenerators = n; }
00057   
00058   /////////////////////////////////////////////////////////////////////////
00059   //                                                                     //
00060   // IPC interaction members:                                            //
00061   //                                                                     //
00062   /////////////////////////////////////////////////////////////////////////
00063 
00064   void writeResults( ostream& ostr ) 
00065     {
00066       ostr <  counter;
00067       ostr < theData;
00068     }
00069 
00070   void readResults( istream& istr) 
00071     {
00072       istr > counter;
00073       istr > theData;
00074     }
00075   
00076 protected:
00077   void enumerate();
00078 private:
00079 
00080   void enumerateAllSubgroups( );
00081   Word getRandomWord() ;
00082 
00083   /////////////////////////////////////////////////////////////////////////
00084   //                                                                     //
00085   // Data Members:                                                       //
00086   //                                                                     //
00087   /////////////////////////////////////////////////////////////////////////
00088 
00089   FreeGroup theGroup;
00090 
00091   bool enumerateAll;
00092   bool isNormalRandom;
00093   
00094   int numberOfGenerators;
00095   int numberOfAll;
00096   int maxLength;
00097   
00098   int counter;
00099   UniformRandom ur; 
00100   NormalRandom nr; 
00101 };
00102 
00103 // ----------------------------------------------------------- //
00104 
00105 class SGEnumeratorProblem : public EnumeratorProblem< Subgroup >
00106 {
00107 public:
00108 
00109   /////////////////////////////////////////////////////////////////////////
00110   //                                                                     //
00111   // Constructors:                                                       //
00112   //                                                                     //
00113   /////////////////////////////////////////////////////////////////////////
00114 
00115   SGEnumeratorProblem(SMFPGroup& );
00116   
00117   /////////////////////////////////////////////////////////////////////////
00118   //                                                                     //
00119   // Front End Interfacing:                                              //
00120   //                                                                     //
00121   /////////////////////////////////////////////////////////////////////////
00122 
00123   void viewStructure(ostream& ostr) const;  // overrides SMObject
00124 
00125   /////////////////////////////////////////////////////////////////////////
00126   //                                                                     //
00127   // Control:                                                            //
00128   //                                                                     //
00129   /////////////////////////////////////////////////////////////////////////
00130   
00131   void takeControl( );         // overrides ComputationManager
00132 
00133   
00134   /////////////////////////////////////////////////////////////////////////
00135   //                                                                     //
00136   // State Transitions:                                                  //
00137   //                                                                     //
00138   /////////////////////////////////////////////////////////////////////////
00139 
00140   void start( ) ;                // overrides ComputationManager  
00141   void terminate( ) { }          // overrides ComputationManager
00142   
00143   void resume( );                // overrides ComputationManager
00144     
00145   
00146    
00147 private:
00148 
00149 
00150   /////////////////////////////////////////////////////////////////////////
00151   //                                                                     //
00152   // Data Members:                                                       //
00153   //                                                                     //
00154   /////////////////////////////////////////////////////////////////////////
00155 
00156   SMFPGroup& theGroup;
00157   SGEnumeratorARCer arcer;
00158 };
00159 
00160 
00161 
00162 
00163 
00164 // ---------------------- IsSubgroupInListARCer ------------------------ //
00165 
00166 
00167 class IsSubgroupInListARCer : public ARCer
00168 {
00169 public:
00170 
00171   /////////////////////////////////////////////////////////////////////////
00172   //                                                                     //
00173   // Constructors:                                                       //
00174   //                                                                     //
00175   /////////////////////////////////////////////////////////////////////////
00176   
00177   IsSubgroupInListARCer( ComputationManager& boss ) 
00178   : ARCer( boss ), result(0) { } 
00179   
00180   ~IsSubgroupInListARCer( ) { 
00181     if (theIterator)
00182       delete theIterator;
00183   }
00184  
00185 
00186 
00187   /////////////////////////////////////////////////////////////////////////
00188   //                                                                     //
00189   // Accessors:                                                          //
00190   //                                                                     //
00191   /////////////////////////////////////////////////////////////////////////
00192 
00193   void setArguments( const SMList<Subgroup>&, const VectorOf<Word>&);
00194   
00195   // Inherited from ARCer:
00196   // bool takeControl( );
00197   
00198   bool isInList();
00199   
00200   
00201   /////////////////////////////////////////////////////////////////////////
00202   //                                                                     //
00203   // IPC interaction members:                                            //
00204   //                                                                     //
00205   /////////////////////////////////////////////////////////////////////////
00206 
00207   void runComputation( );
00208  
00209   void writeResults( ostream& );
00210 
00211   void readResults( istream& );
00212 
00213 
00214 private:
00215 
00216   /////////////////////////////////////////////////////////////////////////
00217   //                                                                     //
00218   // Data Members:                                                       //
00219   //                                                                     //
00220   /////////////////////////////////////////////////////////////////////////
00221 
00222   SMListIterator<Subgroup>* theIterator;
00223   VectorOf<Word> theSubgroup;
00224   bool result;
00225 };
00226 
00227 
00228 
00229 // --------------------- IsSubgroupInList  ------------------------ //
00230 
00231 
00232 class IsSubgroupInList  : public Supervisor
00233 {
00234 public:
00235 
00236   /////////////////////////////////////////////////////////////////////////
00237   //                                                                     //
00238   // Constructors:                                                       //
00239   //                                                                     //
00240   /////////////////////////////////////////////////////////////////////////
00241 
00242  IsSubgroupInList( SMList<Subgroup>&, const class SMSubgroup& );
00243 
00244 
00245   /////////////////////////////////////////////////////////////////////////
00246   //                                                                     //
00247   // Front End Interfacing:                                              //
00248   //                                                                     //
00249   /////////////////////////////////////////////////////////////////////////
00250 
00251   void viewStructure(ostream& ostr) const;  // overrides SMObject
00252 
00253 
00254   /////////////////////////////////////////////////////////////////////////
00255   //                                                                     //
00256   // Control:                                                            //
00257   //                                                                     //
00258   /////////////////////////////////////////////////////////////////////////
00259 
00260   void takeControl( );         // overrides ComputationManager
00261 
00262 
00263   /////////////////////////////////////////////////////////////////////////
00264   //                                                                     //
00265   // State Transitions:                                                  //
00266   //                                                                     //
00267   /////////////////////////////////////////////////////////////////////////
00268 
00269   void start( ) { }            // overrides ComputationManager
00270 
00271   void terminate( ) { }        // overrides ComputationManager
00272 
00273 
00274 private:
00275 
00276   /////////////////////////////////////////////////////////////////////////
00277   //                                                                     //
00278   // Data Members:                                                       //
00279   //                                                                     //
00280   /////////////////////////////////////////////////////////////////////////
00281 
00282   const class SMSubgroup& theSubgroup;
00283   SMList<Subgroup>& theList;
00284 
00285   IsSubgroupInListARCer arcer;
00286 
00287 };
00288 
00289 
00290 // ---------------------- SGListExtractOfIndexARCer --------------------- //
00291 
00292 
00293 class SGListExtractOfIndexARCer : public ARCer
00294 {
00295 public:
00296 
00297   /////////////////////////////////////////////////////////////////////////
00298   //                                                                     //
00299   // Constructors:                                                       //
00300   //                                                                     //
00301   /////////////////////////////////////////////////////////////////////////
00302   
00303   SGListExtractOfIndexARCer( ComputationManager& boss ) 
00304     : ARCer( boss ),
00305     minIndex( 1 ), 
00306     maxIndex( 0 ) { }
00307   
00308   ~SGListExtractOfIndexARCer( ) { 
00309     if (theIterator)
00310       delete theIterator;
00311   }
00312  
00313   
00314 
00315   /////////////////////////////////////////////////////////////////////////
00316   //                                                                     //
00317   // Accessors:                                                          //
00318   //                                                                     //
00319   /////////////////////////////////////////////////////////////////////////
00320 
00321   void setArguments( const SMList<Subgroup>&);
00322 
00323   const SMListData& getData() const { return theData; }
00324   void setMinimalIndex(int  min ) { minIndex = min; }
00325   void setMaximalIndex(int  max ) { maxIndex = max; }
00326   int indexInFreeGroup( const VectorOf<Word>& s )const;
00327   int indexInFPGroup( const VectorOf<Word>& s )const; 
00328  
00329   // Inherited from ARCer:
00330   // bool takeControl( );
00331   
00332    
00333   /////////////////////////////////////////////////////////////////////////
00334   //                                                                     //
00335   // IPC interaction members:                                            //
00336   //                                                                     //
00337   /////////////////////////////////////////////////////////////////////////
00338 
00339   void runComputation( );
00340  
00341   void writeResults( ostream& );
00342 
00343   void readResults( istream& );
00344 
00345 
00346 private:
00347 
00348   /////////////////////////////////////////////////////////////////////////
00349   //                                                                     //
00350   // Data Members:                                                       //
00351   //                                                                     //
00352   /////////////////////////////////////////////////////////////////////////
00353 
00354   SMListIterator<Subgroup>* theIterator;
00355   SMListData theData;
00356   const SMFPGroup* theGroup;
00357   int minIndex; 
00358   int maxIndex;
00359 };
00360 
00361 
00362 
00363 // --------------------- SGListExtractOfIndex ---------------------- //
00364 
00365 
00366 class SGListExtractOfIndex  : public Supervisor
00367 {
00368 public:
00369 
00370   /////////////////////////////////////////////////////////////////////////
00371   //                                                                     //
00372   // Constructors:                                                       //
00373   //                                                                     //
00374   /////////////////////////////////////////////////////////////////////////
00375 
00376  SGListExtractOfIndex( SMList<Subgroup>& );
00377 
00378 
00379   /////////////////////////////////////////////////////////////////////////
00380   //                                                                     //
00381   // Front End Interfacing:                                              //
00382   //                                                                     //
00383   /////////////////////////////////////////////////////////////////////////
00384 
00385   void viewStructure(ostream& ostr) const;  // overrides SMObject
00386 
00387 
00388   /////////////////////////////////////////////////////////////////////////
00389   //                                                                     //
00390   // Control:                                                            //
00391   //                                                                     //
00392   /////////////////////////////////////////////////////////////////////////
00393 
00394   void takeControl( );         // overrides ComputationManager
00395 
00396 
00397   /////////////////////////////////////////////////////////////////////////
00398   //                                                                     //
00399   // State Transitions:                                                  //
00400   //                                                                     //
00401   /////////////////////////////////////////////////////////////////////////
00402 
00403   void start( );            // overrides ComputationManager
00404 
00405   void terminate( ) { }        // overrides ComputationManager
00406 
00407 
00408 private:
00409 
00410   /////////////////////////////////////////////////////////////////////////
00411   //                                                                     //
00412   // Data Members:                                                       //
00413   //                                                                     //
00414   /////////////////////////////////////////////////////////////////////////
00415 
00416   SMList<Subgroup>& theList;
00417   bool started;
00418   SGListExtractOfIndexARCer arcer;
00419 };
00420 
00421 
00422 #endif

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