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

/magnus/back_end/SessionManager/include/ARCer.h

Go to the documentation of this file.
00001 /*
00002  *   $Id: ARCer.h,v 1.3 1997/06/23 18:50:08 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: Declaration of class ARCer.
00009 //
00010 // Principal Author: Dmitry Bormotov.
00011 //
00012 // Status: in progress
00013 //
00014 // Revision History:
00015 //
00016 // * 7/96 Dmitry B. made porting to gcc 2.7.2.
00017 //
00018 
00019 #ifndef _ARCER_H_
00020 #define _ARCER_H_
00021 
00022 
00023 #include <stdio.h>
00024 #include <signal.h>
00025 #include <unistd.h>
00026 #include <fstream.h>
00027 #include <iostream.h>
00028 #include <sys/wait.h>
00029 #include "MagnusHome.h"
00030 #include "ComputationManager.h"
00031 
00032 
00033 // ----------------------------- ARCer ------------------------------------- //
00034 
00035 
00036 class ARCer
00037 {
00038   
00039 public:
00040 
00041   /////////////////////////////////////////////////////////////////////////
00042   //                                                                     //
00043   // Constructors:                                                       //
00044   //                                                                     //
00045   /////////////////////////////////////////////////////////////////////////
00046 
00047   ARCer( ComputationManager& boss, const int delay = 1 );
00048 
00049     
00050   /////////////////////////////////////////////////////////////////////////
00051   //                                                                     //
00052   // Accessors:                                                          //
00053   //                                                                     //
00054   /////////////////////////////////////////////////////////////////////////
00055  
00056   bool isInterrupted() { return bInterrupted; }
00057   
00058   int getPid( ) { return pid; }
00059 
00060   int delay( ) { return theDelay; }
00061 
00062   virtual bool takeControl( );
00063   
00064   virtual void terminate( );
00065 
00066        
00067   /////////////////////////////////////////////////////////////////////////
00068   //                                                                     //
00069   // IPC interaction members:                                            //
00070   //                                                                     //
00071   /////////////////////////////////////////////////////////////////////////
00072 
00073   virtual void runComputation( ) = 0;
00074 
00075   virtual void writeResults( ostream& ) = 0;
00076 
00077   virtual void readResults( istream& ) = 0;
00078  
00079 
00080   /////////////////////////////////////////////////////////////////////////
00081   //                                                                     //
00082   // Data Members:                                                       //
00083   //                                                                     //
00084   /////////////////////////////////////////////////////////////////////////
00085   
00086   Chars startDir;
00087 
00088 protected:
00089   
00090   int pid;
00091   int theDelay;
00092   bool bInterrupted;
00093   ComputationManager& theBoss;
00094 };
00095 
00096 
00097 // ------------------------- ExternalARCer --------------------------------- //
00098 
00099 
00100 class ExternalARCer : public ARCer
00101 {
00102   
00103 public:
00104 
00105   /////////////////////////////////////////////////////////////////////////
00106   //                                                                     //
00107   // Constructors:                                                       //
00108   //                                                                     //
00109   /////////////////////////////////////////////////////////////////////////
00110 
00111   ExternalARCer( ComputationManager& boss, 
00112                  const char* cmdline, 
00113                  const int delay = 1 );
00114 
00115   
00116   /////////////////////////////////////////////////////////////////////////
00117   //                                                                     //
00118   // Accessors:                                                          //
00119   //                                                                     //
00120   /////////////////////////////////////////////////////////////////////////
00121  
00122   // Inherited from ARCer:
00123   //
00124   // bool isInterrupted( );
00125   // int  getPid( );
00126   // void terminate( );
00127 
00128   virtual bool takeControl( );
00129 
00130        
00131   /////////////////////////////////////////////////////////////////////////
00132   //                                                                     //
00133   // IPC interaction members:                                            //
00134   //                                                                     //
00135   /////////////////////////////////////////////////////////////////////////
00136 
00137   virtual void writeArguments( ostream& ) = 0;
00138 
00139   virtual void readResults( istream& ) = 0;
00140  
00141 
00142 private:
00143 
00144   /////////////////////////////////////////////////////////////////////////
00145   //                                                                     //
00146   // Private functions:                                                  //
00147   //                                                                     //
00148   /////////////////////////////////////////////////////////////////////////
00149 
00150   void writeResults( ostream& ) { }
00151 
00152   void runComputation( );
00153   
00154  
00155   /////////////////////////////////////////////////////////////////////////
00156   //                                                                     //
00157   // Data members:                                                       //
00158   //                                                                     //
00159   /////////////////////////////////////////////////////////////////////////
00160     
00161   Chars theCmdLine;
00162   Chars argFN;
00163   Chars resultFN;
00164 };
00165 
00166 
00167 // @db The following class is an experimental version of new ARCer
00168 // class and included here just because of the NormalClosure.
00169 
00170 // ----------------------------- ARCer2 ------------------------------------ //
00171 
00172 
00173 class ARCer2 : public ARCer
00174 {
00175   
00176 public:
00177 
00178   enum State { RUNNING, READING, FINISHED };
00179 
00180   /////////////////////////////////////////////////////////////////////////
00181   //                                                                     //
00182   // Constructors:                                                       //
00183   //                                                                     //
00184   /////////////////////////////////////////////////////////////////////////
00185 
00186   ARCer2( ComputationManager& boss, const int delay = 1 );
00187 
00188   ~ARCer2( ) { delete in; }
00189 
00190     
00191   /////////////////////////////////////////////////////////////////////////
00192   //                                                                     //
00193   // Accessors:                                                          //
00194   //                                                                     //
00195   /////////////////////////////////////////////////////////////////////////
00196  
00197   virtual bool takeControl( );
00198 
00199   void terminate( );
00200  
00201          
00202   /////////////////////////////////////////////////////////////////////////
00203   //                                                                     //
00204   // IPC interaction members:                                            //
00205   //                                                                     //
00206   /////////////////////////////////////////////////////////////////////////
00207 
00208   virtual bool readResults2( istream& ) = 0;
00209  
00210 
00211   /////////////////////////////////////////////////////////////////////////
00212   //                                                                     //
00213   // Data Members:                                                       //
00214   //                                                                     //
00215   /////////////////////////////////////////////////////////////////////////
00216 
00217 private:
00218   
00219   State state;
00220   ifstream* in;
00221 };
00222 
00223 
00224 #endif
00225 

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