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

/magnus/back_end/Enumerators/include/WEnumerator.h

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

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