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

/magnus/back_end/Enumerators/include/ListProblems.h

Go to the documentation of this file.
00001 /*
00002  *   $Id: 
00003  */
00004 
00005 // Copyright (C) 1997 The New York Group Theory Cooperative
00006 // See magnus/doc/COPYRIGHT for the full notice.
00007 
00008 // Contents: Declaration of class
00009 //
00010 // Principal Author: Alexei Myasnikov
00011 //
00012 // Status: in progress
00013 //
00014 // Revision History:
00015 //
00016 
00017 #ifndef _LIST_PROBLEMS_H_
00018 #define _LIST_PROBLEMS_H_
00019 
00020 #include "Supervisor.h"
00021 #include "fastProblems.h"
00022 #include "SMList.h"
00023 #include "SMListIterator.h"
00024 
00025 
00026 
00027 // ---------------------- SMListSupervisor ------------------------ //
00028 // Parent class for supervisors which use general computation managers
00029 // like SMListExtractTrivialWords. They need to pass SMList to computation 
00030 // manager
00031 
00032 class SMListSupervisor :  public Supervisor
00033 {
00034  public:
00035   SMListSupervisor( SMList<Word>& l )
00036     : Supervisor( true ),
00037     theList( l ) { }
00038 
00039   SMList<Word>& getList() { return theList; }
00040   
00041  protected:
00042   
00043   SMList<Word>& theList;
00044   
00045 };
00046 
00047 // ---------------------- SMListJoinARCer ------------------------ //
00048 
00049 template <class T>
00050 class SMListJoinARCer : public ARCer
00051 {
00052 public:
00053 
00054   /////////////////////////////////////////////////////////////////////////
00055   //                                                                     //
00056   // Constructors:                                                       //
00057   //                                                                     //
00058   /////////////////////////////////////////////////////////////////////////
00059   
00060   SMListJoinARCer( ComputationManager& boss ) 
00061     : ARCer( boss ),
00062     l2Data( NULL ), l1Data( NULL ) { } 
00063   
00064   ~SMListJoinARCer( ) { 
00065    if (l1Data)
00066       delete l1Data;
00067     if (l2Data)
00068       delete l2Data;
00069   }
00070  
00071   
00072 
00073   /////////////////////////////////////////////////////////////////////////
00074   //                                                                     //
00075   // Accessors:                                                          //
00076   //                                                                     //
00077   /////////////////////////////////////////////////////////////////////////
00078 
00079   void setArguments( const SMList<T>&, const SMList<T>& );
00080 
00081   const SMListData getJoinData() const { return joinData; }
00082   
00083   // Inherited from ARCer:
00084   // bool takeControl( );
00085   
00086    
00087   /////////////////////////////////////////////////////////////////////////
00088   //                                                                     //
00089   // IPC interaction members:                                            //
00090   //                                                                     //
00091   /////////////////////////////////////////////////////////////////////////
00092 
00093   void runComputation( );
00094  
00095   void writeResults( ostream& );
00096 
00097   void readResults( istream& );
00098 
00099 
00100 private:
00101 
00102   /////////////////////////////////////////////////////////////////////////
00103   //                                                                     //
00104   // Data Members:                                                       //
00105   //                                                                     //
00106   /////////////////////////////////////////////////////////////////////////
00107 
00108   // FPGroup theGroup;
00109   SMListData* l1Data;
00110   SMListData* l2Data;
00111   SMListData joinData;
00112 };
00113 
00114 
00115 
00116 // --------------------- SMListJoin  ------------------------ //
00117 
00118 template <class T> class SMListJoin  : public Supervisor
00119 {
00120 public:
00121 
00122   /////////////////////////////////////////////////////////////////////////
00123   //                                                                     //
00124   // Constructors:                                                       //
00125   //                                                                     //
00126   /////////////////////////////////////////////////////////////////////////
00127 
00128    SMListJoin( SMList<T>&, SMList<T>& );
00129 
00130 
00131   /////////////////////////////////////////////////////////////////////////
00132   //                                                                     //
00133   // Front End Interfacing:                                              //
00134   //                                                                     //
00135   /////////////////////////////////////////////////////////////////////////
00136 
00137   void viewStructure(ostream& ostr) const;  // overrides SMObject
00138 
00139 
00140   /////////////////////////////////////////////////////////////////////////
00141   //                                                                     //
00142   // Control:                                                            //
00143   //                                                                     //
00144   /////////////////////////////////////////////////////////////////////////
00145 
00146   void takeControl( );         // overrides ComputationManager
00147 
00148 
00149   /////////////////////////////////////////////////////////////////////////
00150   //                                                                     //
00151   // State Transitions:                                                  //
00152   //                                                                     //
00153   /////////////////////////////////////////////////////////////////////////
00154 
00155   void start( ) { }
00156 
00157 
00158   void terminate( ) { }        // overrides ComputationManager
00159 
00160 
00161 private:
00162 
00163   /////////////////////////////////////////////////////////////////////////
00164   //                                                                     //
00165   // Data Members:                                                       //
00166   //                                                                     //
00167   /////////////////////////////////////////////////////////////////////////
00168 
00169   SMList<T>& list1;
00170   SMList<T>& list2;
00171   bool started;
00172   SMListJoinARCer<T> arcer;
00173 
00174 };
00175 // -------------------------- MakeSMListOf ------------------------- //
00176 
00177 template <class T> class MakeSMListOf : public FastComputation
00178 {
00179 public:
00180 
00181   MakeSMListOf( EnumeratorProblem<T>& e):
00182     enumerator( e ) { }
00183   
00184   void takeControl( );              // overrides ComputationManager
00185   
00186 protected:
00187   
00188   EnumeratorProblem<T>& enumerator;
00189     
00190 };
00191 
00192 // -------------------------- SMListCheckerARCer --------------- //
00193 /*
00194 class SMListCheckerARCer : public ARCer
00195 {
00196 public:
00197 
00198   /////////////////////////////////////////////////////////////////////////
00199   //                                                                     //
00200   // Constructors:                                                       //
00201   //                                                                     //
00202   /////////////////////////////////////////////////////////////////////////
00203  
00204   SMListCheckerARCer( ComputationManager& boss, char* sb, int l ) 
00205     : ARCer( boss ), theBuffer( sb ),bufferLength( l ) { } 
00206   
00207 
00208   /////////////////////////////////////////////////////////////////////////
00209   //                                                                     //
00210   // Accessors:                                                          //
00211   //                                                                     //
00212   /////////////////////////////////////////////////////////////////////////
00213 
00214   // Inherited from ARCer:
00215   // bool takeControl( );
00216   // virtual void runComputation( ) = 0;
00217   // virtual void writeResults( ostream& ) = 0;
00218   // virtual void readResults( istream& ) = 0;
00219  
00220   char getElementInBuffer( int ) const;
00221   
00222   void setElementInBuffer( int, char );
00223 
00224   int bLength() const { return bufferLength; }
00225 
00226  protected:
00227 
00228 
00229  private:
00230   char* theBuffer;
00231   int bufferLength;
00232 };
00233 
00234 */
00235 
00236 #endif

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