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

/magnus/back_end/SessionManager/include/SMMap.h

Go to the documentation of this file.
00001 /*
00002  *   $Id: SMMap.h,v 1.4 2000/03/03 01:35:19 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 SMMap
00009 //
00010 // Principal Author: Roger Needham
00011 //
00012 // Status: in progress
00013 //
00014 // Revision History:
00015 //
00016 
00017 #ifndef _SMMAP_H_
00018 #define _SMMAP_H_
00019 
00020 #include "AlgebraicObject.h"
00021 #include "SMFPGroup.h"
00022 #include "MIC.h"
00023 #include "Map.h"
00024 #include "AbelianProblems.h"
00025 
00026 
00027 
00028 // ------------------------------- MCM ------------------------------------- //
00029 
00030 
00031 class MCM : public Supervisor
00032 {
00033 public:
00034 
00035   /////////////////////////////////////////////////////////////////////////
00036   //                                                                     //
00037   // Constructors:                                                       //
00038   //                                                                     //
00039   /////////////////////////////////////////////////////////////////////////
00040 
00041   MCM( class SMMap& M );
00042 
00043   /////////////////////////////////////////////////////////////////////////
00044   //                                                                     //
00045   // Accessors:                                                          //
00046   //                                                                     //
00047   /////////////////////////////////////////////////////////////////////////
00048 
00049   SMMap& getMap( ) const { return theMap; }
00050 
00051   /////////////////////////////////////////////////////////////////////////
00052   //                                                                     //
00053   // Front End Interfacing:                                              //
00054   //                                                                     //
00055   /////////////////////////////////////////////////////////////////////////
00056 
00057   void viewStructure(ostream& ostr) const { }
00058 
00059 
00060   /////////////////////////////////////////////////////////////////////////
00061   //                                                                     //
00062   // Subordinate Computation Managers:                                   //
00063   //                                                                     //
00064   /////////////////////////////////////////////////////////////////////////
00065 
00066   Subordinate<MCM,AbelianHomIsMonoComp> abelianHomIsMono;
00067   Subordinate<MCM,AbelianHomIsEpiComp> abelianHomIsEpi;
00068 
00069   /////////////////////////////////////////////////////////////////////////
00070   //                                                                     //
00071   // Control:                                                            //
00072   //                                                                     //
00073   /////////////////////////////////////////////////////////////////////////
00074 
00075   void takeControl( );        // overrides ComputationManager
00076 
00077 
00078   /////////////////////////////////////////////////////////////////////////
00079   //                                                                     //
00080   // State Transitions:                                                  //
00081   //                                                                     //
00082   /////////////////////////////////////////////////////////////////////////
00083 
00084   void start( ) { }           // overrides ComputationManager
00085 
00086   void terminate( ) { }       // overrides ComputationManager
00087 
00088 
00089 private:
00090 
00091   /////////////////////////////////////////////////////////////////////////
00092   //                                                                     //
00093   // Data Members:                                                       //
00094   //                                                                     //
00095   /////////////////////////////////////////////////////////////////////////
00096 
00097   class SMMap& theMap;
00098 
00099   bool didFastChecks;
00100   // The takeControl method does some sneaky checks of obvious properties
00101   // (this should be formalized, since they are not always that fast).
00102   // This records the first call, so that they are not done over and over.
00103 
00104 };
00105 
00106 //---------------------------------------------------------------------------//
00107 //----------------------------- SMMap ---------------------------------------//
00108 //---------------------------------------------------------------------------//
00109 
00110 class SMMap : public AlgebraicObject
00111 {
00112 public:
00113 
00114   /////////////////////////////////////////////////////////////////////////
00115   //                                                                     //
00116   // Constructors:                                                       //
00117   //                                                                     //
00118   /////////////////////////////////////////////////////////////////////////
00119 
00120   SMMap(SMFPGroup& G, Map m, const Chars heritage);
00121 
00122   SMMap(SMFPGroup& G, SMFPGroup& H, Map m, const Chars heritage);
00123 
00124   SMMap(SMFPGroup& G);
00125  
00126   SMMap(SMFPGroup& G, SMFPGroup& H);
00127 
00128   //@rn Bogus ctors; see `But no' comment in Menu.h
00129 
00130   /////////////////////////////////////////////////////////////////////////
00131   //                                                                     //
00132   // Accessors:                                                          //
00133   //                                                                     //
00134   /////////////////////////////////////////////////////////////////////////
00135 
00136   Map getMap( ) const { return theMap; }
00137 
00138   SMFPGroup& getDomain( ) const { return theDomain; }
00139 
00140   SMFPGroup& getRange( ) const { return theRange; }
00141 
00142   MCM& mcm() const { return *theMCM; }
00143 
00144         InformationCenter* infoCenter()       { return &mic; }
00145   const InformationCenter* infoCenter() const { return &mic; }
00146 
00147   /////////////////////////////////////////////////////////////////////////
00148   //                                                                     //
00149   // Front End Interfacing:                                              //
00150   //                                                                     //
00151   /////////////////////////////////////////////////////////////////////////
00152 
00153   static const char* type( ) { return "SMMap"; }
00154 
00155   const char* typeID( ) const { return type(); }        // overrides SMObject
00156 
00157   const IconID iconID( ) const { return IconID::map; }  // overrides SMObject
00158 
00159   void viewStructure(ostream& ostr) const;              // overrides SMObject
00160 
00161   void printProperties(ostream& ostr) const;            // overrides SMObject
00162 
00163   void printDefinition(ostream& ostr) const;            // overrides SMObject
00164 
00165 
00166 protected:
00167 
00168   /////////////////////////////////////////////////////////////////////////
00169   //                                                                     //
00170   // Restricted Access:                                                  //
00171   //                                                                     //
00172   /////////////////////////////////////////////////////////////////////////
00173 
00174   void readMessage(istream&) { }                        // overrides SMObject
00175 
00176 
00177   /////////////////////////////////////////////////////////////////////////
00178   //                                                                     //
00179   // Data Members:                                                       //
00180   //                                                                     //
00181   /////////////////////////////////////////////////////////////////////////
00182 
00183 public:
00184 
00185   MIC mic;
00186 
00187 private:
00188 
00189   const Map theMap;
00190 
00191   SMFPGroup& theDomain;
00192 
00193   SMFPGroup& theRange;
00194 
00195   MCM* theMCM;  // TheObjects removes scm when this is removed.
00196 
00197 };
00198 
00199 #endif

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